10 - 总结与决策树
十章走下来,我们从”HTTP 为什么会失忆”一路讲到了 SSO。这一章把所有线索收口,给你一张能带走的”地图”。
一分钟串起整条主线
① HTTP 无状态 → 服务端会失忆 (第 01 章)
↓ 所以要
② 登录 = 认证(验一次密码)+ 会话保持(之后一直认你) (第 02 章)
↓ 会话保持有两条路
┌───────────────────────┬───────────────────────┐
③ Session + Cookie ④ Token + JWT (第 03 / 04 章)
服务端记账本 凭证自带信息 + 签名
"管得住" "很轻松"
└───────────────────────┴───────────────────────┘
↓ 怎么选
⑤ 看场景:浏览器 Web 用 Session,多端/跨服务用 JWT,常混用 (第 05 章)
↓ 完整跑一遍
⑥ 登录 → 访问 → 退出 的完整旅程 (第 06 章)
↓ 最难的一环
⑦ 退出登录:JWT 收不回已发的证 → 黑名单/短命令牌/换密钥 (第 07 章)
↓ 别忘了
⑧ 安全:密码存哈希、防 XSS、防 CSRF、Cookie 三护身符 (第 08 章)
↓ 长大以后
⑨ 进阶:双令牌、多端登录、踢下线、SSO (第 09 章)
贯穿全篇的一句话
如果这十章你只能记住一句话,记这句:
你想让服务端多一分”控制力”(能退出、能踢人、能封号),就得让服务端多存一分”状态”。控制力和无状态,是一枚硬币的两面。
Session、JWT、黑名单、双令牌、在线表……所有设计,都是在这枚硬币的两面之间找平衡。
选型决策树
开始:我要做登录,选哪套?
│
├─ Q1: 客户端主要是什么?
│ ├─ 就是浏览器(管理后台、内部系统、传统网站)
│ │ → 首选 Session + Redis。简单、可控、退出方便。别硬上 JWT。
│ │
│ └─ App / 小程序 / 前后端分离 / 要跨域 / 微服务
│ → 首选 JWT(放请求头)。多端统一、好扩展。
│ │
│ ▼
├─ Q2: 需不需要"立刻退出 / 改密码失效 / 踢下线 / 封号"?
│ ├─ 不需要(比如内部低敏系统)
│ │ → 纯 JWT + 短过期时间即可,别加存储,保持简单。
│ │
│ └─ 需要(大多数正经产品都需要)
│ → JWT + Redis(黑名单 / 在线表 / token 版本号)
│ 或 直接上 Access + Refresh 双令牌。
│ │
│ ▼
├─ Q3: 有多个内部系统要打通登录吗?
│ └─ 有 → 上 SSO(认证中心 + OAuth2/OIDC)。
│
└─ 无论选哪套,安全项都不能省:
密码哈希+加盐+bcrypt / HTTPS /
Cookie 三护身符(HttpOnly+Secure+SameSite) / 防 XSS / 防 CSRF
避坑清单(高频翻车点)
| ❌ 别这么干 | ✅ 正确姿势 | 出处 |
|---|---|---|
| 数据库存明文密码 | 存哈希 + 加盐 + bcrypt | 08 |
| 用 MD5/SHA1 存密码 | 用故意慢的 bcrypt/argon2 | 08 |
| Session 存进程内存后又部署多台机器 | Session 存 Redis,多机共享 | 03 |
| 以为纯 JWT 能”退出登录” | JWT 退出要靠黑名单/短命令牌 | 07 |
| 往 JWT 的 Payload 里塞密码/身份证 | Payload 只编码不加密,别放敏感信息 | 04 |
| 以为”JWT 比 Session 先进,无脑选 JWT” | 看场景,普通 Web 往往 Session 更省心 | 05 |
| 改密码后旧 token 还能用 | 用 token 版本号/黑名单让旧证失效 | 07 |
| Cookie 不加任何属性 | 加 HttpOnly + Secure + SameSite | 08 |
| Access Token 设成 7 天还不管作废 | 短命 Access + 可作废的 Refresh | 07/09 |
| 全站 HTTP 明文传输凭证 | 全站 HTTPS | 08 |
一张”术语对照”速查表
面试或跟人聊时,能一句话说清这些词,你就真懂了:
| 术语 | 一句话解释 |
|---|---|
| 无状态(Stateless) | 服务端处理完请求就”失忆”,不记得你 |
| 认证 Authentication | 验密码,确认”你是不是本人”(做一次) |
| 会话保持 | 发凭证,之后一直认得你(贯穿始终) |
| Session | 服务端记的账本:“某号码 = 某用户” |
| Cookie | 浏览器自动保存、自动携带的小纸条 |
| Token / JWT | 自带身份信息 + 防伪签名的”通行证” |
| 黑名单 | 记录”已被作废的 token”,验证时多查一步 |
| Access / Refresh | 短命干活证 + 长命续命证 |
| SSO | 一次登录,多个系统通用 |
| XSS / CSRF | 偷凭证 / 冒用凭证的两类经典攻击 |
结语
登录看起来是个”入门功能”,但你现在应该体会到了:它背后牵扯无状态的本质、控制力与扩展性的权衡、安全攻防、分布式一致性……几乎是整个后端思维的一个缩影。
如果这十章的脉络你能在脑子里顺下来——从”HTTP 会失忆”一路推导到”为什么退出登录那么难""为什么要双令牌”——那说明你已经不是在”背登录怎么写”,而是真正理解了它为什么这么设计。这,就是这份教程想给你的东西。
上一章 ← 09 - 进阶场景:双令牌 / 多端登录 / SSO | 回到 README 目录