搞懂cookie、session、token、jwt
一、Cookie
1、什么是Cookie
HTTP cookie也叫cookie,最初用于在客户端存储会话信息。
2、Cookie 的特点
- 存在有效期:Cookie 在生成时就会被指定一个 Expire 值(有效期),过期的 Cookie 会被浏览器自动清除。也可以手动清除
- 由服务器生成:cookie 在用户第一次访问服务器时由服务器生成,并返给浏览器。
- 只能存储字符串:每个字符串都是以 key: value 的形式存储的。key 的名字是唯一的,相同名字时,后者会覆盖掉前者。
- 数量受限:一个浏览器可以存储多个 web 站点提供的 Cookie。不过,浏览器能创建的 Cookie 数量最多为 300 个,每个站点最多存放 20 个 Cookie,每个 Cookie 不能超过 4KB。
- 不安全:可以进行伪造
- 受浏览器的管制:浏览器可以禁用 Cookie,禁用 Cookie 后,也就无法享有 Cookie 带来的方便。
3、Cookie 的工作原理
工作具体流程:若浏览器没有禁用 Cookie,则其第一次发送请求到服务器时,服务器会生成 Cookie 并发送给浏览器,浏览器把 Cookie 以 key: value 的形式保存到客户端磁盘的一个文件中,之后,浏览器再次访问同一网站的服务器时会携带这个 Cookie,这样服务器就能通过 Cookie 中携带的数据来区分不同的用户了——这就好比:给每个客户端颁发一个通行证,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。
二、Session
1、什么是 Session
HTTP是无状态的,为了能够在HTTP协议上保持住状态,比如用户是否登陆接需要一种方案来把用户的一个个无状态HTTP请求关联起来。这种技术就叫Session。Session的功能就是个一个个分离的HTTP请求关联起来,只要实现这个功能,基本上本能叫Session的一种实现。
2、Session的特点
- 唯一性:每个 session 都会有一个唯一标识 sessionid,根据客户端传过来的 cookie 中的 jsessionid,找到对应的服务器端的 session。
- 时效性:每个 session 的有效期是 30 分钟,若有效期内客户端没有访问过该 session,服务器就认为该客户端已离线并删除该 session。
- Session 占用服务器性能,Session 过多,增加服务器压力。
3、Session的工作原理
三、Token
1、什么是Token
Token的意思是“令牌”,是一种网络认证方式,是服务端生成的一串字符串,用于识别客户端的身份,不能用来存储客户端信息,可作为客户端进行请求的一个标识。
当用户第一次登录后,服务器生成一个Token并将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
2、Token的特点
- 无状态:token 自身包含了身份验证所需要的所有信息,使得我们的服务器不需要存储 Session 信息,这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。
- 适合移动应用:移动端上不支持 cookie,而 token 只要客户端能够进行存储就能够使用,因此 token 在移动端上也具有优势。
- 单点登录友好:使用 Session 进行身份认证的话,实现单点登录,需要我们把用户的 Session 信息保存在一台电脑上,并且还会遇到常见的 Cookie 跨域的问题。但是,使用 token 进行认证的话, token 被保存在客户端,完全由应用管理,所以它可以避开同源策略,不会存在跨域问题