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 应用、需要可靠的即时退出登录、或偏好更简单的模型时。
使用 JWT 的场景:构建移动端/SPA API、微服务架构、跨域认证,或需要无状态时。
使用 Session 的场景:构建传统 Web 应用、需要可靠的即时退出登录、或偏好更简单的模型时。