外观
一句话答案
Cookie 存客户端(自动发送),Session 存服务端(依赖 Cookie 传 SessionID),Token 无状态自包含(JWT)。
核心要点
| 维度 | Cookie | Session |
|---|---|---|
| 存储位置 | 客户端(浏览器) | 服务端(内存/Redis/DB) |
| 安全性 | 较低(可被 JS 读取,可篡改) | 较高(存在服务端) |
| 大小限制 | ~4KB | 无限制(受服务器内存限制) |
| 生命周期 | 可持久化(Expires/Max-Age 设置) | 默认浏览器关闭则失效;服务端可设超时 |
| 跨域 | Cookie 有 Same-Site 限制 | Session ID 通过 Cookie 携带,同样有跨域问题 |
| 扩展性 | 不依赖服务器,天然分布式 | 多服务器需要 Session 共享(Redis) |
关系:
- Session 通常通过 Cookie 传递 Session ID
- 用户第一次请求 → 服务端创建 Session → 将 Session ID 写入 Cookie
- 后续请求 → 浏览器自动携带 Cookie(含 Session ID)→ 服务端查找对应 Session
Cookie 的安全属性:
HttpOnly:禁止 JS 读取(防 XSS 盗 Cookie)
Secure:只在 HTTPS 下传输
SameSite=Strict/Lax/None:控制跨站请求是否携带 Cookie(防 CSRF)三、浏览器全流程
追问与易错
追问方向:
- Token 存在哪里?LocalStorage 还是 Cookie?
- JWT 能做到注销吗?
- CSRF 和 XSS 分别怎么防?
易错点:
- ❌ Token 比 Cookie 更安全——取决于存储和传输方式
- ❌ Session 已经过时了——微服务场景仍广泛使用
💡 记忆锚点
三种身份凭证的比喻:Cookie 是贴在你额头上的标签(客户端存,自动亮给服务员看);Session 是餐厅的客人登记簿(服务端存,Cookie 只带一个座位号);Token 是自带照片的身份证(JWT自包含信息,不用查后台,但撕不掉——无法主动注销)。