第3章 · Session-Cookie认证

有状态的经典会话机制:Session 工作原理、Cookie 机制、交互流程与安全防护。

3.1 Session 工作原理

Session(会话)是服务器端为每个用户维护的临时数据存储。用户登录后,服务器创建一个唯一的 Session ID,并将用户数据(角色、ID等)保存在内存/缓存中。后续请求携带该 ID,服务器据此恢复上下文。

核心特征:无状态协议(HTTP)通过 Session 获得“有状态”能力。Session 数据存储在服务端,客户端仅持有标识符。
客户端 服务器 Session 存储 ① 登录请求 (凭证) ② Set-Cookie: SID=abc123 ③ Cookie: SID=abc123 (后续请求)

服务器通过 Session ID 查找对应的数据区,完成用户身份识别。常用存储介质:内存、Redis、数据库。

3.2 Cookie 机制

Cookie 是浏览器存储的小型文本(≤4KB),由服务器通过 Set-Cookie 响应头设置,之后每次请求自动附加在 Cookie 头中。属性包括:

属性说明安全建议
Domain指定可接收 Cookie 的域名尽量精确,避免泛域名
Path限定路径范围默认 /
Expires / Max-Age持久化时间Session Cookie 不设置则关闭浏览器失效
Secure仅通过 HTTPS 传输生产环境必须开启
HttpOnly禁止 JavaScript 访问防止 XSS 窃取,务必开启
SameSite控制跨站请求行为Lax 或 Strict 可防 CSRF
浏览器 Web 服务器 请求 Set-Cookie: SID=xxx; HttpOnly; Secure; SameSite=Lax Cookie 存储

3.3 Session 与 Cookie 交互流程

典型交互分为三个阶段:

  1. 登录认证:用户提交凭证,服务器验证成功后创建 Session,并将 Session ID 通过 Set-Cookie 下发。
  2. 会话保持:浏览器自动携带 Cookie,服务器解析 Session ID,加载用户数据。
  3. 注销/过期:服务器销毁 Session,或 Cookie 过期,会话结束。
用户/浏览器 服务端 Session 存储 POST /login (user+pwd) Set-Cookie: SID=abc; HttpOnly; Secure GET /dashboard Cookie: SID=abc 200 OK (用户数据) POST /logout → 销毁 Session Set-Cookie: SID=; Max-Age=0

3.4 Session 劫持与防护

攻击者通过窃取 Session ID 冒充用户。常见攻击向量:XSS、网络嗅探、中间人攻击、Session 固定。

攻击类型描述防护措施
XSS 窃取 Cookie恶意脚本读取 document.cookieHttpOnly 标志;输入过滤/CSP
网络嗅探明文传输截获 Cookie全站 HTTPS + Secure 标志
Session 固定强制用户使用攻击者指定的 Session ID登录后重新生成 Session ID
CSRF 利用跨站请求携带 CookieSameSite 属性 + CSRF Token
暴力破解 Session ID猜测有效 Session ID使用足够随机且长(≥128位)的 ID
攻击者 用户 服务器 窃取 SID 正常请求 攻击者使用窃取的 SID 冒充用户 防护:HttpOnly + Secure + SameSite + 定期轮换 + 绑定IP/User-Agent
纵深防御建议:① 始终使用 HTTPS;② Session ID 长度≥128位,使用密码学安全随机数;③ 登录/权限变更后重置 Session;④ 设置合理的过期时间;⑤ 结合多因素认证。