Token、Session、Cookie、JWT、OAuth 区别
•分类技术笔记
Cookie:浏览器端存储载体 - Session:会话数据放服务端,cookie存id - JWT:会话数据加密放客户端,服务端无状态 - Token:身份凭证统称 - OAuth:第三方授权标准
## Cookie
浏览器存储的数据,由后端通过`Set‑Cookie`响应头下发,后续请求浏览器会自动带上。
关键安全配置:
1. `httpOnly`:JS读不到,防XSS偷凭证
2. `secure`:只在HTTPS下传输,**生产环境要开,开发环境关掉**
3. `sameSite`:防CSRF,兼顾跨页跳转
4. `maxAge`:过期时间,单位毫秒,例1小时:`3600*1000`
5. 单条上限4KB
Node常用包:`cookie‑parser@1.4.7`
后端设置示例:
```js
res.cookie('session_id', sessionId, {
maxAge: 3600 * 1000,
httpOnly: true,
secure: false,
sameSite: 'lax',
path:'/'
})
```
## Session
数据**存在服务端**,Cookie只存一个`session_id`标识。
流程:用户登录→后端生成session存用户数据,把session_id放进Cookie返回;之后请求浏览器自动带上cookie,后端拿session_id去查服务端用户信息。
> 多服务器集群部署:需要Redis共享session,但会有性能瓶颈。
## JWT
为解决集群session共享问题,去中心化方案:把用户信息加密签名后直接放客户端(存Cookie里),服务端不用存会话。
JWT Token三段结构:
1. 头部:加密算法、类型
2. 载荷:业务会话数据
3. 签名:校验有没有被篡改
⚠️ JWT可以被解码,**不能放敏感信息**。
> 把JWT放进Cookie的好处:浏览器请求自动携带token,不用前端手动处理;配合`httpOnly`还能避免JS窃取。
## Token
泛指身份凭证,JWT就是Token的其中一种实现。
## OAuth
第三方授权登录协议,比如微信、Github登录这类场景。
### 简单区分
- Cookie:浏览器端存储载体
- Session:会话数据放服务端,cookie存id
- JWT:会话数据加密放客户端,服务端无状态
- Token:身份凭证统称
- OAuth:第三方授权标准
要不要用工作任务模式,把这些整理成一份可预览的网页笔记?
