一文彻底搞懂Cookie、Session、Token到底是什么
有一个小小的计划,将自己以前纠结的,经常会忘记的,一直保存在收藏夹里的,有时候面试也会被问的问题统统找出来,这次我们一起把它搞的明明白白。
因为个人当前的认知,很多东西也是取之于网络,肯定错误百出,欢迎读者朋友批评指正。
1 现在我们从清空Chrome浏览器收藏夹开始。
今天聊一个很经典的问题:Cookie、Session、Token。
这个问题,应该说是很经典了。要回答好这个问题,并不容易。特别是回答的面试官满意就更难了。
如果不是当时帮助隔壁部门的小姐姐调试一个Jmeter的登录脚本,我是万不能想象还有企业在用cookie存储数据。也可能是我的见识过于小喽。
2 废话不多说,我们先上链接。
别人写的已经够好了,需要的直接点进去看吧。我后面也是对这些的总结,便于自己记忆罢了。
傻傻分不清之 Cookie、Session、Token、JWT
3 好了,我们一起来研究下这个问题。
HTTP服务是无状态的。
对于一些网站,必须想办法保持用户的状态,直到用户结束或者退出该网站。比如说电商网站,用户要经历登录---浏览商品---加入购物车---付款等。如果每一步都要重新登录,那就过于麻烦了。
那怎么办呢,初期互联网都是使用cookie来存储用户信息的。
4 首先来说说cookie
cookie是存储在客户端的。
下图大致介绍了Cookie产生的过程
imageCookie中的参数设置
image这个介绍的会比那个更详细些。
image
看到人家写的东西,感觉总结的真好。
5 再来说说session
Session是存储在服务端方,客户端只存储SessionId。
image image6 Cookie 和 Session 的区别
讲完了那么多,到底什么区别呢。
可以从这几个方面说:
安全性: Session 比 Cookie 安全,Session 是存储在服务器端的,Cookie 是存储在客户端的。
存取值的类型不同:Cookie 只支持存字符串数据,想要设置其他类型的数据,需要将其转换成字符串,Session 可以存任意数据类型。
有效期不同: Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效。
存储大小不同: 单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。
我再补充一点: 数据保存在服务端会消耗服务器的性能。
7 token又是干什么的
Token类似一个令牌,无状态的,服务端所需的信息被Base64编码后放到Token中,服务器可以直接解码出其中的数据。
我的理解呢,主要是现在的系统大都是分布式,不同的服务分布在不同地域不同机房的不同机器上。为了解决这个问题,就诞生了token这个解决方案。
流程大致是这个样子的。
(1)Acesss Token
image(2)Refresh Token
image我们公司也是这样用的,但是当时并不理解Refresh Token干啥用的,现在算是理解了。
8 JWT token
还是看原文吧,我怕自己写不好。
http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html
好了,今天就到这了。
其实本文里面最重要的就是两个链接,大家不要喷我哈。