今天在阅读Sa-token文档的时候看到了这样一句话
无 Cookie 模式:特指不支持 Cookie 功能的终端,通俗来讲就是我们常说的 —— 前后端分离模式。
这是什么意思呢?
关联又在哪呢?
这个问题激起了我学习的欲望。
在解答这个问题的时候我们需要对session,cookie和token有基本的了解。
session,cookie和token
首先,
http是一个无状态协议
什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,每次请求都相互独立,不会记录上次请求的状态。
cookie和session
为了使某个域名下的所有网页能够共享某些数据,session和cookie就该发挥作用了。客户端访问服务器的流程如下
- 首先,客户端会发送一个http请求到服务器端。
- 服务器端接受客户端请求后,建立一个session,并发送一个http响应到客户端,这个响应头,其中就包含Set-Cookie头部。该头部包含了sessionId。Set-Cookie格式如下,具体请看Cookie详解
Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
- 在客户端发起的第二次请求,假如服务器给了set-Cookie,浏览器会自动在请求头中添加cookie
- 服务器接收请求,分解cookie,验证信息,核对成功后返回response给客户端
简而言之, session 有如用户信息档案表, 里面包含了用户的认证信息和登录状态等信息. 而 cookie 就是用户通行证
token
token也称作令牌,由uid+time+sign[+固定参数]
token 的认证方式类似于临时的证书签名, 并且是一种服务端无状态的认证方式, 非常适合于 REST API 的场景. 所谓无状态就是服务端并不会保存身份认证相关的数据。
token组成
uid: 用户唯一身份标识
time: 当前时间的时间戳
sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接
固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查库
token认证流程
token 的认证流程与cookie很相似
用户登录,成功后服务器返回Token给客户端。
客户端收到数据后保存在客户端
客户端再次访问服务器,将token放入headers中
服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码
- session存储于服务器,可以理解为一个状态列表,拥有一个唯一识别符号sessionId,通常存放于cookie中。服务器收到cookie后解析出sessionId,再去session列表中查找,才能找到相应session。依赖cookie
- cookie类似一个令牌,装有sessionId,存储在客户端,浏览器通常会自动添加。
- token也类似一个令牌,无状态,用户信息都被加密到token中,服务器收到token后解密就可知道是哪个用户。需要开发者手动添加。
jwt只是一个跨域认证的方案
前后端分离
前后端分离就是把一个应用的前端代码和后端代码分开来写,前端程序员只负责前端部分,后端程序员只负责后端。前后端只需完成数据交换便可实现对应功能。
回到一开始的问题
无 Cookie 模式指的是一种不支持 Cookie 功能的终端运行环境。这种模式通常应用于前后端分离的架构中。在前后端分离模式下,前端和后端是完全独立的两个部分,它们通过 API 或其他方式进行通信,而不是通过传统的 Cookie 来保持状态或进行认证。这样可以提高系统的灵活性和安全性,尤其是在跨域访问和分布式系统中更为适用。在前后端分离的架构中,前端通过 API 与后端进行通信。使用 Token 可以简化 API 的设计和使用,前端只需在请求头中附加 Token,而不需要处理复杂的 Cookie 操作。
但我感觉这句话还是有点毛病。。。。( ×ω× )
转载自:https://cloud.tencent.com/developer/article/1683290
感谢作者!!!