早期互联网只是用来访问查看,不需要关心谁在访问查看。HTTP
是一种无状态的协议,每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,为了标示用户,就出现了Cookie
,而Cookie
、Token
、JWT
都是用来标示用户的。
Cookie
如:iChochy
用户发起访问,服务端为了进行会话跟踪,会为当前用户的访问会话(Session
)生成一个会话ID(Session ID
),并通过Set Cookie
方式,将Session ID
发送给用户的客户端浏览器。客户端自动识别服务端发来的Cookie
信息,就会存储在客户端。再次请求时,都带上这个Cookie
信息来标示当前用户,服务端自动识别到Cookie
信息,就可以判断具体是哪个用户了。
Token
Token
是一个令牌,用户登录成功后服务端会生成一个令牌,用来关联会话(Session
)信息,如同Cookie
,只是需要手动传递。
JWT
JWT
是JSON Web Token
的简称,可以理解为是Token
的升级版本,用户登录成功后服务端会生成的一个很长的字符串,中间用点(.)分隔成三个部分,内容包含Header.Payload.Signature
。JWT
的不同点就是可以携带具体的用户信息,不再只是标示ID。
Session
Session
就是服务端生成的用户会话信息,一般就是用户信息,存储在服务端。
对比Cookie
、Token
、JWT
不同点 | Cookie | Token | JWT |
---|---|---|---|
标准 | 系统默认 | 自定义 | 自定义 |
用户标示 | 包含 | 包含 | 包含 |
跨域 | 不支持 | 支持 | 支持 |
具信信息 | 不包含 | 不包含 | 包含 |
关系
关系如下图:
总结
Cookie
、Token
、JWT
都是请求无状态的一种补充,用来标示用户,只是侧重点不同。Cookie
是最原始的系统默认标准,前后端都会自动处理Cookie
信息,不需要过多的干预。而Token
、JWT
都是标准的升级和自定义,Token
出现解决了Cookie
不能跨域的问题,而JWT
可以携带具体的用户信息,将用户信息存储在客户端,解决了分布式用户信息存储。
**Session
**是用户会话的具体信息,一般就是用户信息,如ID、Role、Auth等。