想了解更多请看这篇coolshell.cn/articles/53…
cookie
定义
http协议中,服务器发给浏览器的Token,此后,浏览器向同一域名的服务器发送请求时,会在header上自动带上这段字符。
浏览器给服务器发送:cookie
服务器给浏览器发送:set-cookie,
localstorage也可以发送Token,但是必须手动发送
总结:Token就是加密的字符串,cookie存储了Token,并且可以自动发送
Session
定义
为识别用户,服务器给每个客户端分配不同的“身份标识”,并且这个身份表示是用session保存在服务器(会占用服务器资源) 的,用来处理服务器下发的随机数和真实数据之间的对应关系,一般基于 cookie
JWT
定义
JWT其实是 JSON Web Token
和session不同,JWT直接将数据存储到了Token中,没有保存在服务器中
结构
Header:
alg 标记加密算法
typ 类型
Payload(body):
JSON ,包括过期时间等设置
Signature(密文):
密文就是加密过的内容,内容里面包括(私钥,base64(header),base64(body))
base64是为了防止出现一些不明字码
因此JWT的经典结构是这样的
Header.Payload.Signature
总结
JWT就是将uid加密给前端
和session区别
JWT:把uid存到密文,再把密文发送给前端
session:把uid存到内存,再把key发送给前端
用法
session的用法:
发一个请求
Post=======》cookie
get/user====》user1的所有信息 以Json格式返回给前端
什么都不用做
JWT
post/jwt=========>jwt 算法.uid=1.密文====》1. 前端把jwt存到localstorage中====》2. 让axios带上jwt
get/user==========》1. 服务器看Auth中有没有jwt,有的话就解密======》2. 看密文中的uid和 uid=1 是不是一样的(密文里面有uid=1了,但是灰色部分的uid=1是只读的并不能改,密文就是验证是不是uid=1)======》3.验证成功之后,服务器把uid的信息以json形式发给前端
jwt和cookie
jwt为什么不放在cookie中?其实是可以的,但是cookie是在http协议,jwt除了http协议还可以使用在其他协议中
jwt是做web认证,而cookie是做http认证的