一篇文章搞懂Session, Cookie and JWT
为什么需要Session和Cookie
HTTP协议是无状态的,服务器没法单单通过每次request知道访问者的身份,需要一种机制来解决这个问题。
session和cookie的工作机制
- 浏览器第一次登录一个网站会在服务器创建一个session对象,对象保存了一个唯一的sessionID,Session的结束时间(Max-age)等属性;
- 服务器通过response向浏览器设置sessionID和Max-age(Set-Cookie)等;
- 浏览器取得Cookie后进行保存;
- 之后每次浏览器向服务器发送request都会附带上这个Cookie,其中就保存了sessionID;
- 服务器通过sessionID进行校验从而识别访问者的身份;
- Session和Cookie过期后需要重新认证。
Cookie
保存在浏览器的一小段文本信息,大小一般为4kb。
Session
保存在服务器端的一种对象,具有sessionID等属性。
为什么需要JWT
相比Session-Cookie机制节省服务器资源,更加适合分布式等。
JWT的工作机制
- 浏览器第一次登录一个网站后服务器会生成一个JWT, 并保存JWT的签名密文
- 服务器将JWT发送给浏览器
- 浏览器收到JWT后可以保存到Cookie或者Storage中
- 下次进行访问时会携带服务器签发的JWT
- 服务器进行校验
Json Web Token
JWT由三部分组成
header.payload.signature
-
header:声明生成签名的算法
-
payload:保存特定数据,如:有效期
-
signature:由header和payload通过Base64编码后结合服务器保存的密文进行计算后得到
需要注意的是JWT保存在客户端
参考列表:
BV1ob4y1Y7Ep