一、前情提要
由于许多文章更多是这三者的总结和比较,而本文主要是对Cookie、Session、Token的理解,因此并不涉及到具体的优缺点、生命周期等细节的东西
二、Cookie
1.Cookie的本质:过去我们去奶茶店买奶茶的时候,他会给你一张纸卡,你每消费一次,这张纸卡就会记录一次你的消费记录
2.Cookie存在的问题
- 由于你每次都需要记录(比如说奶茶店会给你盖章表示喝奶茶一次),Cookie的长度通常来说比较长(盖章太多),这样服务端和客户端之间传递的信息量就会比较大
- Cookie不安全,由于在客户端进行存储,别人可以根据本地的Cookie来进行伪装,从而对服务端的安全产生威胁
- 由于在客户端进行存储,当在A电脑登录时,能传递信息给客户端,但当在B电脑登录时,却没有了。比如我想在任何设备查看购物车信息就没有办法通过Cookie进行存储
三、Session
1.session的本质:当我们去奶茶店买奶茶的时候,他会给你一张卡,上面有卡号,我们可以通过卡号,你每消费一次,让店员在操作机上给你记录一次
2.解决上面Cookie的问题
- 由于SessionID(卡号)是一串数字,相对于Cookie来说(盖章),它是没有那么长的,这样客户端和服务端之间传递的信息量就小
- 假设使用Cookie实现Session时,由于客户端只存储了SessionID,那么即使SessionID被窃取,也不会对服务端的安全产生影响,只会对你的信息产生影响罢了(谁让你自己丢了呢?doge)
四、Token
1.为什么要引入Token?
- 细心的同学可能发现了,Cookie存在的第三个问题呢,怎么Session没解决掉呢,而这就是我们为什么要引入Token的原因之一
- 服务器需要存储SessionID,这会加大服务端的压力,而Token不需要存储在服务端
- 在分布式中,如果我们没有存储SessionID的服务器B去请求服务器A,会出现无法请求的情况
2.Token的验证过程(注意这里不是服务器端和token进行比较
,他是整个token中已经含有了签名,让token自己含有的签名和破解密钥后的签名进行比较)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。