日期:2026-07-11
标签:#面试 #八股 #后端 #登录态 #分布式会话 #场景题
一句话答案
应用实例保持无状态:服务端 Session 存 Redis 等共享存储,或使用短期签名 Access Token;敏感系统通常用 Access Token 加服务端会话/Refresh Token 组合以支持撤销。
面试口语版
不能把登录 Session 只放单机内存,否则负载均衡到另一台就丢失。方案一是浏览器持有随机 sessionId,服务端把用户、权限和过期时间存 Redis,各实例统一读取;方案二是 JWT 等签名 Token,实例本地验签,扩展性好但即时撤销困难。实际常使用短期 Access Token + 服务端保存的 Refresh Token/会话版本,兼顾性能和踢下线。Cookie 要设置 Secure、HttpOnly、SameSite,Token 通过 TLS 传输并定期轮换。
方案对比
| 方案 | 优点 | 缺点 |
|---|---|---|
| Sticky Session | 改造少 | 故障迁移和扩容不友好 |
| Redis Session | 易撤销、状态集中 | 依赖 Redis 可用性 |
| 自包含 Token | 无状态、扩展好 | 撤销、权限变更和体积问题 |
关键细节
- 不建议依赖负载均衡粘性作为唯一会话方案。
- Redis 故障时登录策略按风险选择 fail-close 或有限降级。
- Token 不存敏感明文,签名不等于加密。
- 权限变化可通过短有效期、sessionVersion 或黑名单生效。
面试官追问
- JWT 如何实现立即踢下线?
- Redis Session 挂了怎么办?
- Access Token 为什么要短期有效?
面试官追问参考答案
1. JWT 如何实现立即踢下线?
纯自包含 JWT 无法天然立即失效,可在服务端维护用户 sessionVersion、jti 黑名单或活跃会话表,每次敏感请求校验;更常见是缩短 Access Token 有效期并撤销 Refresh Token。
2. Redis Session 挂了怎么办?
先用主从/集群恢复,认证系统通常倾向 fail-close,避免未验证请求进入;可对低风险读使用极短本地会话快照。恢复后会话数据是否丢失决定用户是否需重新登录。
3. Access Token 为什么要短期有效?
Token 泄漏后的可利用窗口更短,权限变更和撤销也能较快收敛。续期通过受保护、可撤销且轮换的 Refresh Token 完成,并检测重复使用。
学习清单
- 能比较共享 Session 与 JWT。
- 理解撤销、续期和安全 Cookie。