直接回答:Session 劫持是攻击者拿到受害者的会话标识(XSS 窃取 Cookie、网络嗅探、日志泄露等)后冒用身份。Session 固定更隐蔽:攻击者先诱导受害者使用一个攻击者已知的 session ID(如带 ?sid=xxx 的链接),受害者登录后该 ID 升级为已认证会话,攻击者凭同一 ID 直接进入账号。两者的共同关键防线是:登录成功后必须更换 session ID。

展开解析:针对固定攻击:认证状态变化时都重新生成会话——PHP 的 session_regenerate_id、Spring Security 默认开启的 session fixation protection 都是这个机制,旧 ID 立即作废;同时只从 Cookie 读取 session ID,拒绝 URL 传参。针对劫持:Cookie 设置 HttpOnly(挡 XSS 读取)、Secure(仅 HTTPS 传输)、SameSite;敏感操作要求重新认证;会话设置合理过期;泄露时能服务端主动失效——这是服务端 session 相比无状态 JWT 的可控性优势。

追问方向:token 放 localStorage 为什么比 HttpOnly Cookie 更怕 XSS?分布式 session 如何安全共享?会话过期时间如何取舍?

(约 390 字)