首页 / 知识库 / python服务端进阶 / 解析用户登录场景案例

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

避坑清单(高频翻车点)

❌ 别这么干✅ 正确姿势出处
数据库存明文密码存哈希 + 加盐 + bcrypt08
用 MD5/SHA1 存密码用故意慢的 bcrypt/argon208
Session 存进程内存后又部署多台机器Session 存 Redis,多机共享03
以为纯 JWT 能”退出登录”JWT 退出要靠黑名单/短命令牌07
往 JWT 的 Payload 里塞密码/身份证Payload 只编码不加密,别放敏感信息04
以为”JWT 比 Session 先进,无脑选 JWT”看场景,普通 Web 往往 Session 更省心05
改密码后旧 token 还能用用 token 版本号/黑名单让旧证失效07
Cookie 不加任何属性加 HttpOnly + Secure + SameSite08
Access Token 设成 7 天还不管作废短命 Access + 可作废的 Refresh07/09
全站 HTTP 明文传输凭证全站 HTTPS08

一张”术语对照”速查表

面试或跟人聊时,能一句话说清这些词,你就真懂了:

术语一句话解释
无状态(Stateless)服务端处理完请求就”失忆”,不记得你
认证 Authentication验密码,确认”你是不是本人”(做一次)
会话保持发凭证,之后一直认得你(贯穿始终)
Session服务端记的账本:“某号码 = 某用户”
Cookie浏览器自动保存、自动携带的小纸条
Token / JWT自带身份信息 + 防伪签名的”通行证”
黑名单记录”已被作废的 token”,验证时多查一步
Access / Refresh短命干活证 + 长命续命证
SSO一次登录,多个系统通用
XSS / CSRF偷凭证 / 冒用凭证的两类经典攻击

结语

登录看起来是个”入门功能”,但你现在应该体会到了:它背后牵扯无状态的本质、控制力与扩展性的权衡、安全攻防、分布式一致性……几乎是整个后端思维的一个缩影。

如果这十章的脉络你能在脑子里顺下来——从”HTTP 会失忆”一路推导到”为什么退出登录那么难""为什么要双令牌”——那说明你已经不是在”背登录怎么写”,而是真正理解了它为什么这么设计。这,就是这份教程想给你的东西。


上一章 ← 09 - 进阶场景:双令牌 / 多端登录 / SSO | 回到 README 目录