1. Cookie
Cookie其实是浏览器保存在电脑中的一些key-value结构形式的文本数据,其中包含了我们以及服务器的一些信息,当我们向服务器发送请求的时候,这些cookie数据会随着请求(request)报文一起发送服务器,服务器识别当前的cookie,同时服务器也可以在响应(response)报文的头部加上set-cookie希望浏览器可以缓存cookie,浏览器收到响应报文,发现了set-cookie字段就会将其数据保在浏览器
cookie由服务器创建,保存在浏览器中(标记浏览器),当浏览器下一次访问该服务器时,会自动携带该cookie
2 Session
session从字面上讲就是会话,表明客户端与服务器的一次会话,与Cookie不一样,Session是由服务器进行维护的(服务器创建,由服务器保存的)。当客户端向服务发送一个请求时,服务器会为发起这个请求的客户端创建一个对象并存储在服务器的一个集合中,同时生成一个唯一的SessionId来标识这个对象,而有关这个请求的客户端信息就保存在这个session中。当服务器给用户发送响应报文时,也会将sessionid放入set-cookie中,浏览器接收到响应报文后,保存这个cookie,当下一次向服务器发送请求的时候会带上这个cookie然后服务端进行验证
服务端不会一直维护session,它会在用户退出浏览器、或者在一段时间没有接收到这个用户的请求后将Session清除
Session的缺点,对于每一个用户服务器都需要维护一个或多个Session,若一段时间内访问服务器的用户数量庞大,将导致服务器需要维护大量的Session对象,严重占用资源 ,除此之外,当今的web服务器,都采用了集群的技术,集群中的每一台服务器的Session都是独立的,要实现Session共享比较麻烦 。
三、token(令牌)
Token的引入:
Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
Token的定义:
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
使用Token的目的:
Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
Token又叫令牌,不仅可以在登录场景中使用, 在涉及到多系统互信的场景下都可以使用;算是一种轻量化的加密传输手段
JWT-生成token
1. 什么是JWT
JWT 即Json Web Token,将用户登录状态以及数据用加密的json格式存储在客户端,服务端可以完全依靠这个字符串认定用户身份。简单来说,这是一种用户身份认证的解决方案。
2. JWT的构成
一个JWT实际上就是一个字符串,由三部分组成分别是:
header(头部)
payload(载荷)
signature(签名)
payload(载荷)信息存放的是Claims声明信息。载荷其实就是自定义的数据,一般存储用户Id,过期时间等信息。也就是JWT的核心所在,因为这些数据就是使后端知道此token是哪个用户已经登录的凭证。而且这些数据是存在token里面的,由前端携带,所以后端几乎不需要保存任何数据。
将这三部分拼接起来: token = header + '.'+ payload +'.'+ signature,生成token
MD5,JWT
一。MD5
MD5(Message Digest Algorithm 5)是一种常用的哈希算法,用于将任意长度的输入数据转换为固定长度的哈希值。MD5将输入数据映射为128位(16字节)的哈希值,通常以32位的十六进制字符串表示。
MD5的主要特点如下:
- 不可逆性:将数据进行MD5哈希后,无法从哈希值还原出原始数据。
- 唯一性:不同的输入数据应该产生不同的MD5哈希值。
- 高效性:MD5算法在计算哈希值时具有较高的计算速度。
然而,由于MD5算法的安全性缺陷,现已不推荐用于对密码等敏感信息进行加密存储。由于其较短的输出长度和存在碰撞(两个不同的输入得到相同的MD5哈希值)的可能性,MD5容易受到暴力破解和碰撞攻击。
二。JWT
JWT(JSON Web Token)是一种用于在网络应用之间传递声明的开放标准。它由三部分组成,即头部(Header)、载荷(Payload)和签名(Signature)。JWT的主要作用是在用户和服务器之间传递身份验证和授权信息。它可以安全地编码和传输用户的声明(例如用户ID、角色、权限等)。
JWT的工作过程如下:
- 用户提供身份验证凭证(例如用户名和密码)。
- 服务器验证凭证,并生成一个包含用户声明的JWT。
- 服务器将JWT发送给客户端,客户端将其存储在本地(通常通过Cookie或本地存储)。
- 客户端在后续的请求中将JWT附在请求头部(通常是
Authorization头部)发送给服务器。 - 服务器验证JWT的签名和有效期,并使用其中的用户声明进行身份验证和授权检查。
JWT具有以下优点:
- 无状态:JWT本身包含了所有必要的信息,服务器不需要在自己的存储中维护会话状态。这样可以更好地支持多服务器的分布式系统。
- 可扩展性:JWT的载荷可以包含任何自定义的声明,适用于各种业务需求。
需要注意的是,保证JWT的安全性非常重要。为了确保JWT不被篡改,应使用密钥对JWT进行签名,并对敏感信息进行加密或其他必要的安全措施。
总结:MD5是一种哈希算法,用于将数据转换为固定长度的哈希值。JWT是一种用于在网络应用之间传递声明的开放标准,用于身份验证和授权。MD5已不推荐用于加密存储敏感信息,而JWT可以提供无状态和可扩展的身份验证和授权机制。在使用MD5和JWT时,需要注意安全性和加密保护。
token登录,加盐使用UUID生成不重复的随机数
String salt = UUID.randomUUID().toString().substring(0, 8);
UUID简介:
UUID(Universally Unique Identifier)是一种标识符,用于在计算系统中唯一地标识信息。它是一个128位的数字,通常以字符串形式表示,由32个十六进制数字和4个短划线组成(例如:550e8400-e29b-41d4-a716-446655440000)。
UUID的生成算法保证了在同一个计算系统中几乎不会出现重复的标识符。它可以用于各种场景,如数据库记录的唯一标识、分布式系统中的节点标识、文件系统中的文件名等。
UUID有不同的版本,最常用的是基于时间戳和MAC地址的版本1和基于随机数的版本4。版本1的UUID包含了生成时的时间戳和MAC地址,因此具有一定的顺序性和唯一性。而版本4的UUID完全基于随机数生成,更适合在分布式系统中使用。
总之,UUID是一种用于唯一标识信息的标识符,具有广泛的应用场景,并且能够在大多数情况下保证唯一性。
本文探讨了Cookie、Session、Token(包括JWT)和MD5/哈希算法在Web应用中的角色,强调了Cookie和Session的区别,Token(特别是JWT)在减轻服务器压力和无状态身份验证中的优势,以及MD5的安全局限性和JWT的可扩展性。还提到了使用UUID生成唯一标识符的实践。
3924

被折叠的 条评论
为什么被折叠?



