浅谈一下cookie、session、JWT

54 阅读2分钟

想了解更多请看这篇coolshell.cn/articles/53…

cookie

定义

http协议中,服务器发给浏览器的Token,此后,浏览器向同一域名的服务器发送请求时,会在header上自动带上这段字符。

浏览器给服务器发送:cookie
服务器给浏览器发送:set-cookie,
localstorage也可以发送Token,但是必须手动发送

总结:Token就是加密的字符串,cookie存储了Token,并且可以自动发送

image.png

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认证的