通俗讲Cookie,Session,Token区别

  • Post author:
  • Post category:其他


1.Cookie

保存在浏览器
​
第一阶段: Cookie里面保存用户的原始用户名密码,每次访问服务器时,浏览器携带已经保存用户名密码的Cookie,有服务器解析验证用户名密码是否匹配,如果匹配无需再次登录   但是不非常安全,如果黑客得到完整Cookie就能得到完整的用户名密码
​
第二阶段: Cookie里面保存用户的原始用户名密码非常不安全,而恰好服务器生成了唯一的SessionID并且还要返回给浏览器,那么浏览器的Cookie就可以保存SessionID并且通过Session的有效期设置成Cookie的过期时间,解决了Cookie放完成信息的巨大危险
​
第三阶段: Cookie里面存储Token,这种方式相比于阶段二对于浏览器并没有什么改善,改善在于服务器对于存储更加轻松了

2.Session

Session
用户进行用户名密码验证以后,如果验证成功,服务器会为每个用户生成唯一的Session ID和Session ID的过期时间,并将这个Session放入到数据库中,到达过期时间自动清除
那么服务端生成以后服务端是保存了,客户端怎么存在呢?
将这个SessionID和过期发送到浏览器,由浏览器处理,于是有了Cookie第二阶段

3.Token

Session体积比较大,当用户量多了以后,服务器对于Session的存储可能会承压
​
因此不希望服务器存储那么多的Session数据,于是就出现了Token,我们服务器只需要定义一个密文,比如abcde,每个用户在登录时,服务器都使用这个相同的abcde+用户名密码+加密算法生成一个签名,这个签名就是Token,然后将Token发送到浏览器,浏览器将Token可以存储在Cookie也可以存储在Storage中,下次请求携带着来就可以了,这样服务器只需要存储abcde,轻松了

4.JWT

Json Web Token: JWT 是Token的具体实现

Token没有规定传输的数据是什么类型,以及加密算法,加密算法加密出的数据是什么格式,仅仅是抽象出了Token的使用是什么流程,有哪些流程,比如Token可以是一个字符串,也可以是一排数组6为18位等等

那么JWT就是Token的一种具体实现,JWT将以JSON加密形式保存在客户端的,并且加密算法也规定为HMAC【哈希消息验证码(对称)】,RSASSA【RSA签名算法(非对称)】,ECDSA【椭圆曲线数据签名算法(非对称)】三种,最终数据也规定为标头(Header)、有效载荷(Payload)和签名(Signature)三个部分.

用户登录以后,由服务器生成JWT,并且将JWT发送给浏览器,由浏览器存储完整的Token,服务器只存储Token签名的密文浏览器将Token可以存储在Cookie也可以存储在Storage中



版权声明:本文为weixin_56892092原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。