前言
今天就来说说session、cookie、token这三者之间的关系!最近这仨玩意搞得头有点大🤣
1.为什么会有它们三个?
我们都知道 HTTP 协议是无状态的,所谓的无状态就是客户端每次想要与服务端通信,都必须重新与服务端链接,意味着请求一次客户端和服务端就连接一次,下一次请求与上一次请求是没有关系的。
这种无状态的方式就会存在一个问题:如何判断两次请求的是同一个人?就好比用户在页面 A 发起请求获取个人信息,然后在另一个页面同样发起请求获取个人信息,我们如何确定这俩个请求是同一个人发的呢?
为了解决这种问题,我们就迫切需要一种方式知道发起请求的客户端是谁?此时,cookie、token、session 就出现了,它们就可以解决客户端标识的问题,在扩大一点就是解决权限问题。
它们就好比让每个客户端或者说登录用户有了自己的身份证,我们可以通过这个身份证确定发请求的是谁!从而知道用户登录的信息
2.什么是 cookie?
cookie 是曲奇饼,甜点的意思,这里不得不提到一个前雇员,故事简略说就是,发明这个人的是一个公司的前雇员,这个公司待遇比较好,每天都会有定时的甜点,饮料等吃的,可以给每个雇员免费品尝,而这个前雇员特别喜欢公司里 的甜点,每次都吃的好多好多,后来…取名cookie 技术的由来就来啦。
cookie 是保存在客户端或者说浏览器中的一小块数据,大小限制大致在 4KB 左右,在以前很多开发人员通常用 cookie 来存储各种数据,后来随着更多浏览器存储方案的出现,cookie 存储数据这种方式逐渐被取代,主要原因有如下:
- cookie 有存储大小限制,4KB 左右。
- 浏览器每次请求会携带 cookie 在请求头中。
- 字符编码为 Unicode,不支持直接存储中文。
- 数据可以被轻易查看。
cookie 主要有以下属性:
属性名称 | 属性含义 |
---|---|
-name- | -value- |
-value- | -cookie 的值- |
comment | cookie 的描述信息 |
domain | 可以访问该 cookie 的域名 |
expires |