JWT vs Session 对比

🎫 JWT

  • 无状态 — 服务器无需存储
  • 自包含(用户数据在 token 中)
  • 适合微服务架构
  • 移动端友好(无需 Cookie)
  • 过期前无法主动失效
  • 负载比 Session ID 更大
  • 必须在客户端存储 token

🍪 Session

  • 有状态 — Session 存储在服务器
  • 易于失效(退出登录)
  • Cookie 小(仅 Session ID)
  • HttpOnly Cookie 防止 XSS 窃取
  • 需要共享存储(Redis/数据库)
  • 水平扩展较难
  • 浏览器内置 Cookie 支持
特性 JWT Session
即时退出登录❌ 困难✅ 简单
微服务✅ 原生支持⚠️ 需要共享存储
移动端应用✅ 很好⚠️ 可用
XSS 防护⚠️ 建议用 httpOnly Cookie✅ HttpOnly
CSRF 防护✅(放请求头)⚠️ 需要 CSRF token
每次请求查数据库✅ 不需要❌ 需要
建议

使用 JWT 的场景:构建移动端/SPA API、微服务架构、跨域认证,或需要无状态时。

使用 Session 的场景:构建传统 Web 应用、需要可靠的即时退出登录、或偏好更简单的模型时。