Yihui’s Blog

单体项目多机部署后,如何共享用户登录信息?

日期: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 或黑名单生效。

面试官追问

  1. JWT 如何实现立即踢下线?
  2. Redis Session 挂了怎么办?
  3. 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。
维护与整理 · Yihui在 GitHub 上编辑

继续阅读

浏览全部文章