状态保存的方式#
http协议是无状态的,也就是说上一次请求和下一次请求之间是没有关联的,但是很多时候我们需要状态的保持,特别是登录状态的保持,一般来说,现在实现状态保持的方式,在不考虑第三方平台的情况下,也就下面的几种方式
- Cookie
- LocalStorage/SessionStorage
- Session
- JWT Token
至于什么是Cookie,什么是Session,什么是LocalStorage/SessionStorage,什么是JWT,在这里就不再重复的去做基础性的讲解了,如果有不太清楚的同学,可以看一下我们基础课的node视频,都有很详细的讲解,我们这里简单总结一下这几种方式的特点
1. Cookie#
- 原理:将信息存储在浏览器的 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 可能被伪造或泄露

