简述 Cookie、Token、JWT、Session之间的关系

背景

早期互联网只是用来访问查看,不需要关心谁在访问查看。HTTP是一种无状态的协议,每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,为了标示用户,就出现了Cookie,而CookieTokenJWT 都是用来标示用户的。

Cookie

如:iChochy用户发起访问,服务端为了进行会话跟踪,会为当前用户的访问会话(Session)生成一个会话ID(Session ID),并通过Set Cookie方式,将Session ID发送给用户的客户端浏览器。客户端自动识别服务端发来的Cookie信息,就会存储在客户端。再次请求时,都带上这个Cookie信息来标示当前用户,服务端自动识别到Cookie信息,就可以判断具体是哪个用户了。
在这里插入图片描述

Token

Token是一个令牌,用户登录成功后服务端会生成一个令牌,用来关联会话(Session)信息,如同Cookie,只是需要手动传递。

JWT

JWTJSON Web Token的简称,可以理解为是Token的升级版本,用户登录成功后服务端会生成的一个很长的字符串,中间用点(.)分隔成三个部分,内容包含Header.Payload.SignatureJWT的不同点就是可以携带具体的用户信息,不再只是标示ID

Session

Session就是服务端生成的用户会话信息,一般就是用户信息,存储在服务端。

对比Cookie、Token、JWT

不同点 Cookie Token JWT
标准 系统默认 自定义 自定义
用户标示 包含 包含 包含
跨域 不支持 支持 支持
具信信息 不包含 不包含 包含

关系

关系如下图:
在这里插入图片描述

总结

CookieTokenJWT都是请求无状态的一种补充,用来标示用户,只是侧重点不同。Cookie是最原始的系统默认标准,前后端都会自动处理Cookie信息,不需要过多的干预。而TokenJWT都是标准的升级和自定义,Token出现解决了Cookie不能跨域的问题,而JWT可以携带具体的用户信息,将用户信息存储在客户端,解决了分布式用户信息存储。

Session是用户会话的具体信息,一般就是用户信息,如IDRoleAuth等。

源文:https://ichochy.com/posts/20200825/