前后端 会话状态保持
本文将介绍如何在基于无状态的 HTTP 的前后端通信中实现会话状态保持。
一、无状态的 HTTP
HTTP 是无状态的,它并没有 “记忆”,每次 HTTP 请求都是独立的。
二、Session
狭义的 Session 指的是会话,即客户端与服务端之间一对一的 “相互沟通”,一次会话往往包含多次通信;广义的 Session 指的是会话状态,即会话的相关状态信息,例如用户信息等。
下文的 Session 指的是会话状态
会话状态保持主要有两种方案:
- Server Side Session:服务器存储信息,客户端携带存储信息对应的 key
- Client Side Session:客户端存储信息
三、Server Side Session
1. 工作方式
- 服务端将状态信息存储在 Session 库中,生成 session_id
- 客户端访问服务端时,应该携带 session_id
- 服务端根据客户端携带的 session_id 查找对应的 Session
2. 缺点
如果存在
多 Server + 负载均衡 + Session 本地化存储
的情况,需要考虑 Session 分布式存储时的访问问题。常见的解决方案有:- Session Sticky:将用户与服务器绑定,每个用户都始终只与一台服务器进行通信
- 将 Session 集中存储
四、Client Side Session
1. 工作方式
- 服务端将状态信息打包,交给客户端存储
- 客户端访问服务端时,应该携带状态信息
- 服务端提取客户端携带的状态信息,做校验后使用
2. 常见方案
常通过 JWT 实现,具体请看: