
这是面试和架构设计中最经典的问题。为了能一眼看懂,这里将它们的区别总结为 “核心逻辑”、“优缺点对比” 和 “选型建议” 三个部分。
维度 | Session (会话) | JWT (令牌) | 谁赢了? |
|---|---|---|---|
存储位置 (数据) | 服务端 (内存/Redis) | 客户端 (Token 内部 Payload) | Session 更安全 |
验证方式 | 查表 (拿着 ID 去找数据) | 计算 (解密签名,校验数据) | JWT 更高效(省数据库) |
网络传输量 | 极小 (只有一串 ID) | 较大 (包含用户信息和签名) | Session |
分布式/集群 | 困难 (需 Redis 共享 Session) | 极佳 (天生支持,无需共享) | JWT (完胜) |
即时注销/踢人 | 容易 (删服务端数据立刻生效) | 困难 (发出去收不回,需等过期) | Session (完胜) |
安全性风险 | 易受 CSRF (跨站伪造) | 易受 XSS (若存 LocalStorage) | 平局 |
客户端支持 | 浏览器友好 (Cookie) | 全平台 (浏览器/APP/小程序) | JWT |
1. 什么时候用 Session?
2. 什么时候用 JWT?