glownight

返回

先澄清一个常见误区:Cookie 是“存/带数据的方式”,SessionJWT 是“登录态实现方式”。

项目CookieSessionJWT
本质浏览器存储+自动随请求发送服务端保存登录状态自包含的签名令牌
状态存哪客户端(浏览器)服务端(Redis/内存/DB)主要在令牌里(客户端持有)
服务端每次查库/查存储视内容而定通常要(按 sessionId 查)通常不用(验签即可)
失效/登出控制通过过期或删除很容易,删 session 即可较难,常靠短期过期+黑名单/轮换
典型风险被窃取、CSRF(若自动带)会话固定、会话存储压力泄露后可被重放到过期,撤销困难

关键差异:

  • Session:最容易做“可控下线/封禁/踢人”,但有服务端状态成本。
  • JWT:跨服务、无状态扩展好,但撤销难,设计不当安全风险更高。
  • Cookie:可承载 sessionIdJWT;不是 Session/JWT 的对立面。

怎么选(实战):

  1. 传统 Web 后台、管理系统:优先 Session + HttpOnly + Secure + SameSite Cookie
  2. 多端/API 网关/微服务:短期 Access JWT + Refresh Token(刷新令牌要轮换)。
  3. 安全要求高且要随时失效:优先 Session 或“opaque token + introspection”。
  4. Web 端尽量不要把长期 token 放 localStorage(XSS 风险高)。
Cookie / Session / JWT 的差异是什么?登录态方案怎么选?
作者 glownight
发布于 2025年4月9日