一文彻底搞懂Cookie、Session、Token到底是什么

有一个小小的计划,将自己以前纠结的,经常会忘记的,一直保存在收藏夹里的,有时候面试也会被问的问题统统找出来,这次我们一起把它搞的明明白白。

因为个人当前的认知,很多东西也是取之于网络,肯定错误百出,欢迎读者朋友批评指正。

1 现在我们从清空Chrome浏览器收藏夹开始。

今天聊一个很经典的问题:Cookie、Session、Token。

这个问题,应该说是很经典了。要回答好这个问题,并不容易。特别是回答的面试官满意就更难了。

如果不是当时帮助隔壁部门的小姐姐调试一个Jmeter的登录脚本,我是万不能想象还有企业在用cookie存储数据。也可能是我的见识过于小喽。

2 废话不多说,我们先上链接。

别人写的已经够好了,需要的直接点进去看吧。我后面也是对这些的总结,便于自己记忆罢了。

傻傻分不清之 Cookie、Session、Token、JWT

https://juejin.cn/post/6844904034181070861

3 好了,我们一起来研究下这个问题。

HTTP服务是无状态的。

对于一些网站,必须想办法保持用户的状态,直到用户结束或者退出该网站。比如说电商网站,用户要经历登录---浏览商品---加入购物车---付款等。如果每一步都要重新登录,那就过于麻烦了。

那怎么办呢,初期互联网都是使用cookie来存储用户信息的。

4 首先来说说cookie

cookie是存储在客户端的。

下图大致介绍了Cookie产生的过程

image

Cookie中的参数设置

image

这个介绍的会比那个更详细些。


image

看到人家写的东西,感觉总结的真好。

5 再来说说session

Session是存储在服务端方,客户端只存储SessionId。

image
image

6 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

好了,今天就到这了。

其实本文里面最重要的就是两个链接,大家不要喷我哈。

你可能感兴趣的:(一文彻底搞懂Cookie、Session、Token到底是什么)