Skip to content

认证模型:Session、Cookie、Token 与前端存储边界

主题定位

认证相关问题很容易被讲成一句“Token 放哪里更安全”,但这其实把好几个层级压扁了。Session、Cookie、Token 分别描述的是服务端状态、浏览器携带机制和凭证表达方式,它们本来就不在同一层。

  • 认证相关问题很容易被讲成一句“Token 放哪里更安全”,但这其实把好几个层级压扁了。Session、Cookie、Token 分别描述的是服务端状态、浏览器携带机制和凭证表达方式,它们本来就不在同一层
  • 这道题经常被追问,是因为它天然会牵动 XSS、CSRF、跨域、刷新令牌、登出失效和多标签页同步
  • 如果不能先把概念层级拆开,后面一旦问到“为什么不用另一种方式”,答案会迅速失真
  • 真正成熟的回答,必须同时交代凭证如何传、谁能读、谁来失效、以及出了问题会暴露什么攻击面

Session、Cookie、Token 各自解决什么问题

Session

Session 先看职责边界,再看生命周期、数据形态和与其他对象的协作关系。 Session 的差异最终会体现在 协议语义、连接代价、失败恢复 这几个维度。 Session 讲清适用边界、失效条件和代价结构,结论才有技术含量。

Cookie 先看职责边界,再看生命周期、数据形态和与其他对象的协作关系。 Cookie 的差异最终会体现在 协议语义、连接代价、失败恢复 这几个维度。 Cookie 讲清适用边界、失效条件和代价结构,结论才有技术含量。

Token

Token 先看职责边界,再看生命周期、数据形态和与其他对象的协作关系。 Token 的差异最终会体现在 协议语义、连接代价、失败恢复 这几个维度。 Token 讲清适用边界、失效条件和代价结构,结论才有技术含量。

认证边界与存储取舍

  • 这道题经常被追问,是因为它天然会牵动 XSS、CSRF、跨域、刷新令牌、登出失效和多标签页同步
  • 如果不能先把概念层级拆开,后面一旦问到“为什么不用另一种方式”,答案会迅速失真
  • 真正成熟的回答,必须同时交代凭证如何传、谁能读、谁来失效、以及出了问题会暴露什么攻击面
  • 优点是服务端控制力强,失效、下线、权限回收都更直接
  • 代价是服务端需要维护状态,扩容和多节点同步时要考虑会话存储
  • 如果 Cookie 承担的是 Session ID,那么它服务的是服务端会话模型

工程设计建议

  • 这道题经常被追问,是因为它天然会牵动 XSS、CSRF、跨域、刷新令牌、登出失效和多标签页同步
  • 如果不能先把概念层级拆开,后面一旦问到“为什么不用另一种方式”,答案会迅速失真
  • 真正成熟的回答,必须同时交代凭证如何传、谁能读、谁来失效、以及出了问题会暴露什么攻击面
  • 优点是服务端控制力强,失效、下线、权限回收都更直接
  • 代价是服务端需要维护状态,扩容和多节点同步时要考虑会话存储

问答设计及延伸

标准回答

回答 认证模型:Session、Cookie、Token 与前端存储边界 时,先定义 Session、Cookie、Token 各自解决的问题,再比较它们在 协议语义、连接代价、失败恢复 上的差异,最后给出选型边界和工程代价。

追问拆解

  • 认证模型:Session、Cookie、Token 与前端存储边界 与“CORS 与跨域:同源策略、预检、凭证模式与缓存影响”的边界关系
  • 认证模型:Session、Cookie、Token 与前端存储边界 与“浏览器存储:Cookie、localStorage、sessionStorage、IndexedDB 与配额边界”的边界关系
  • 认证模型:Session、Cookie、Token 与前端存储边界 与“XSS 与 CSRF:脚本注入和跨站请求伪造的边界”的边界关系
  • 跨标签页、跨域、多端协作场景下的结论变化
  • 维护成本上升后的优先级调整

容易失分的点

  • 只给“哪个好”的结论,不先拆对象
  • 只报 API 或术语,不解释运行时行为和代价
  • 缺少真实场景,导致结论过度绝对

项目映射

  • 结合真实系统说明 Session 到 Token 分别落在哪段链路
  • 补充未选方案的放弃原因和约束差异
  • 补充线上问题、治理动作和验证结果

相关主题