【接口】HTTP(4)|Session、Cookie、token有什么区别?

HTTP是一种无状态的协议,服务器本身没有记忆功能,无法记住客户端之前是否有发送过请求,因此客户端每次发送的请求都是独立的

无状态:HTTP是一个无状态的协议。这句话里的无状态是什么意思? - 知乎

1、为什么需要cookie?

首先http是一种无状态的协议,需要让业务之间有关联,就需要cookie这门技术,让业务页面之间有数据传递。

cookie是一门客户端技术,一般由服务器生成返回给浏览器客户端来保存的,并且cookie是以键值对的形式保存在浏览器客户端的,每一个cookie都会有名称,值,过期时间...在项目中比较常见的有:1、登录记住用户名 2、记住用户浏览记录...

2、session生成方式?

浏览器第一次访问服务器,服务器会创建一个session,然后同时为该session生成一个唯一的会话的key,也就是sessionid.

然后,将sessionid及对应的session分别作为key和value保存到缓存中,也可以持久化到数据库中,然后服务器再把sessionid,以cookie的形式发送给客户端。

这样浏览器下次再访问时,会直接带着cookie中的sessionid。然后服务器根据sessionid找到对应的session进行匹配;

还有一种是浏览器禁用了cookie或不支持cookie,这种可以通过URL重写的方式发到服务器;

简单来讲,用户访问的时候说他自己是张三,他骗你怎么办? 那就在服务器端保存张三的信息,给他一个id,让他下次用id访问。

session是放到cookie里面,请求头里面携带

3、为什么会有token的出现? 

首先,session的存储是需要空间的,其次,session的传递一般都是通过cookie来传递的,或者url重写的方式;

而token在服务器是可以不需要存储用户的信息的,而token的传递方式也不限于cookie传递,当然,token也是可以保存起来的;

token不一定放到cookie里面,可以放到请求体/请求参数里面;有的项目不需要把token放到cookie中

4、token的生成方式?

浏览器第一次访问服务器,根据传过来的唯一标识userId,服务端会通过一些算法,如常用的HMAC-SHA256算法,然后加一个密钥,生成一个token,然后通过BASE64编码一下之后将这个token发送给客户端;

客户端将token保存起来,下次请求时,带着token,服务器收到请求后,然后会用相同的算法和密钥去验证token,如果通过,执行业务操作,不通过,返回不通过信息;

5、token和session的区别?

token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌;

session服务器会保存一份,可能保存到缓存,文件,数据库;

同样,session和token都是有过期时间一说,都需要去管理过期时间;

其实token与session的问题是一种时间与空间的博弈问题,session是空间换时间,而token是时间换空间。两者的选择要看具体情况而定。

虽然确实都是“客户端记录,每次访问携带”,但 token 很容易设计为自包含的,也就是说,后端不需要记录什么东西,每次一个无状态请求,每次解密验证,每次当场得出合法 /非法的结论。这一切判断依据,除了固化在 CS 两端的一些逻辑之外,整个信息是自包含的。这才是真正的无状态。 而 sessionid ,一般都是一段随机字符串,需要到后端去检索 id 的有效性。万一服务器重启导致内存里的 session 没了呢?万一 redis 服务器挂了呢?

方案 A (session):我发给你一张身份证,但只是一张写着身份证号码的纸片。你每次来办事,我去后台查一下你的 id 是不是有效。

方案 B(token) :我发给你一张加密的身份证,以后你只要出示这张卡片,我就知道你一定是自己人。

6、cookie和session token的联系:

  1、session可以通过Cookie实现,也可以不通过

  2、token也可以通过Cookie实现,也可以不通过

  3、Cookie+session一般都搭配做认证,Cookie是放在浏览器中的,session 是保存在服务端的数据库中的

  4、由于Cookie一般是和域名绑定的,一般很少和token搭配

相关推荐

  1. 接口HTTP(4)|Session、Cookie、token什么区别?

    2024-04-06 06:40:07       32 阅读
  2. httpshttp 什么区别

    2024-04-06 06:40:07       61 阅读
  3. HTTPHTTPS什么区别

    2024-04-06 06:40:07       38 阅读
  4. 什么HTTPS协议,与HTTP协议什么区别

    2024-04-06 06:40:07       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-06 06:40:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-06 06:40:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-06 06:40:07       87 阅读
  4. Python语言-面向对象

    2024-04-06 06:40:07       96 阅读

热门阅读

  1. WPF OnStartup

    2024-04-06 06:40:07       39 阅读
  2. WPF中TextWrapping

    2024-04-06 06:40:07       40 阅读
  3. 探索ChatGPT的学术应用:写出优质论文的突破之道

    2024-04-06 06:40:07       43 阅读
  4. pix2pix GAN

    2024-04-06 06:40:07       36 阅读
  5. ubuntu如何限制系统日志大小?

    2024-04-06 06:40:07       39 阅读
  6. Mac 下载 (FinallShell)

    2024-04-06 06:40:07       34 阅读
  7. 【云计算】云网络是未来的网络基础设施

    2024-04-06 06:40:07       44 阅读
  8. Ubuntu系统安装NVIDIA 与pytorch

    2024-04-06 06:40:07       33 阅读