Skip to content

状态保存方式

状态保存的方式#

http协议是无状态的,也就是说上一次请求和下一次请求之间是没有关联的,但是很多时候我们需要状态的保持,特别是登录状态的保持,一般来说,现在实现状态保持的方式,在不考虑第三方平台的情况下,也就下面的几种方式

  • Cookie
  • LocalStorage/SessionStorage
  • Session
  • JWT Token

至于什么是Cookie,什么是Session,什么是LocalStorage/SessionStorage,什么是JWT,在这里就不再重复的去做基础性的讲解了,如果有不太清楚的同学,可以看一下我们基础课的node视频,都有很详细的讲解,我们这里简单总结一下这几种方式的特点

  • 原理:将信息存储在浏览器的 Cookie 中,客户端每次发请求时会自动携带 Cookie 信息,服务器可以通过 Cookie 识别状态信息。
  • 特点
    • 自动发送:浏览器自动附加cookie到请求头
    • 安全性控制:可通过HttpOnly(防XSS)、Secure(仅Https)、SameSite(防CSRF)等属性增加安全
    • 大小限制:单个Cookie通常不超过4KB

2.LocalStorage/SessionStorage#

  • 原理: 用户登录后,将Token或其他凭证存储在浏览器的LocalStorage或sessionStorage中,前端在请求时手动添加到HTTP头。
  • 特点:
    • 存储容量较大,数据不会随请求自动发送。
    • 易受XSS攻击,需注意安全防护

3.服务器端 Session#

  • 原理:登录时,服务器生成一个唯一的 Session ID,并将其存储在服务器端。该 Session ID 会存储在浏览器的 Cookie 中,用户每次请求时,服务器通过 Session ID 识别登录状态。
  • 特点:
    • 服务端存储:用户数据在服务器,安全性较高
    • 扩展性问题:分布式系统需要共享Session存储(比如Redis集群处理)

4. JWT(JSON Web Token)#

  • 原理:将用户信息加密并编码成一个 Token,通常通过 Bearer Token 的方式传递给客户端,在客户端保存 Token(通常为localStorage或者Cookie) 并随着后续每次请求,通过Authorization头属性一起发送。
  • 特点:
    • 无状态:服务端无需存储Token,适合分布式系统
    • 自包含性:Token可以携带用户信息,适当减少数据库访问
    • 安全性:如果没有适当的安全控制,Token 可能被伪造或泄露

image-20250227154923819

image-20250227154947222