程序员接单群

Session 是一种在无状态的 HTTP 协议中维持用户状态的机制,其工作原理可分为以下四个核心阶段:
1. 创建阶段
- 用户首次访问时,服务器生成唯一 Session ID(如
SESS12345) - 该 ID 通常通过 Cookie 返回浏览器(如
Set-Cookie: sessionid=SESS12345) - 服务器端创建对应的存储空间(内存/数据库),初始状态为空
2. 存储阶段
- 服务器将用户数据(如登录状态、购物车)关联到 Session ID
- 存储方式包括:
- 内存存储:快速但服务器重启丢失
- 数据库存储:持久化但增加 I/O 开销
- 分布式缓存(如 Redis):平衡性能与持久性
- 数据示例:
SESS12345 → {user_id: 1001, cart: [A,B]}
3. 传递阶段
- 浏览器后续请求自动携带 Session Cookie
- 服务器通过 Session ID 检索数据:
请求头: Cookie: sessionid=SESS12345 服务器 → 查找存储中 SESS12345 对应的数据 - 若无 Cookie(如禁用时),可通过 URL 重写传递 ID:
example.com?sessionid=SESS12345
4. 销毁阶段
- 显式销毁:用户登出时服务器主动删除数据
- 超时销毁:设置空闲超时(如 30 分钟),通过时间戳验证:
销毁条件: 当前时间−最后活动时间>Tmax \text{销毁条件}:\ \text{当前时间} - \text{最后活动时间} > T_{\text{max}} 销毁条件: 当前时间−最后活动时间>Tmax - 安全措施:Session ID 轮换(敏感操作后生成新 ID)
安全机制
- Cookie 属性:
HttpOnly:阻止 JavaScript 访问Secure:仅通过 HTTPS 传输SameSite:防御 CSRF 攻击
- Session 固定防护:登录成功后更换 Session ID
- 加密签名:防止客户端篡改 Session 数据
关键点:Session 的本质是 ID 映射,状态数据始终存储在服务器端,客户端仅持有无意义的标识符。这种设计平衡了状态维护与安全性需求。
Java面试:Session工作原理及安全机制
104万+

被折叠的 条评论
为什么被折叠?



