彻底搞懂Session、Cookie、token的区别

2021-04-20T16:53:06

彻底搞懂Session、Cookie、token的区别

今天纠正了最大的一个误区,session、cookie、token到底是些什么东西,是有什么作用,值得记录一下。

前言

HTTP协议是无状态的,什么是无状态呢,就是你的下一次请求和上一次请求是没有任何关系的,服务器也不知道是一个人请求了两遍接口,还是两个人分别请求了一次接口。这样的好处肯定是服务器不需要作额外的操作来分辨,降低了服务器负载,但是但是但是,如果要做一个系统,这个系统操作很多,第一步是用户登录,后续的操作都是基于用户登录的情况下进行的,那么服务器就没办法识别了。所以这种情况行不通,必须有其他解决办法来实现服务器分辨用户的能力。

Session会话模式

session字面意思就是会话,所谓会话就是要保持你和另一个人沟通的这种状态。服务器为了区分用户,会给用户一个session_id,这个session_id一般存在客户端(浏览器)的cookie中,每次请求的时候都把session_id传给后端,后端很具session_id从session里面进行寻找,找到了,就相当于知道用户了。

服务器会把session存放在服务器上,但是如果在高并发的情况下,服务器的session会存很多信息,而且session一般都在内存里,很影响服务器性能,所以在高并发状况下,不建议使用session。另外,它也不支持分布式,因为分布式相当于分成多个后端,那这样的话,我的session只能保存在一个后端,用户访问其他节点接口时候,就会出现认证失败的情况。

token模式

token模式相比于session模式,会更容易支持高并发。

用户一开始请求服务器进行登录认证,认证成功之后,服务器根据用户的id等不敏感信息生成一个加密后的字符串序列,也就是token,把token放在响应头里,返回给前端用户,以后每次的请求,用户都需要带着token。后端接收到token,进行解析,解析成功,就认为用户已经登录,而且也可以根据当时加密所加的那些字段,识别用户身份。

cookie

cookie一般称为cookies,类型为小型的文本文件,相当于一个浏览器的小型数据库,用于存储简单不敏感信息,内存很小,一般存放session_id。如果系统采用session会话模式,那么前端从cookie中取得session_id,再去访问服务器,这是正常流程。

由于cookie内存非常小,所以后续浏览器衍生出了SessionStorage、localstorage等浏览器的小型数据库。SessionStorage里的数据关闭浏览器自动清除。

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »