【Java面试之session工作原理】

Java面试:Session工作原理及安全机制

程序员接单群
在这里插入图片描述

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 映射,状态数据始终存储在服务器端,客户端仅持有无意义的标识符。这种设计平衡了状态维护与安全性需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值