Cookie
Cookie 是存储在用户浏览器中的小型文本数据,用于跟踪和识别用户。
特点:
- 由服务器通过
Set-Cookie响应头设置 - 浏览器会自动在后续请求中通过
Cookie请求头发送 - 存储在客户端(浏览器)
- 有大小限制(通常4KB左右)
- 可以设置过期时间(会话Cookie或持久Cookie)
使用场景:
- 用户偏好设置
- 购物车信息
- 简单的用户跟踪
Session
Session 是一种服务器端的机制,用于跟踪用户状态。
工作原理:
- 服务器为每个会话创建唯一的Session ID
- 通过Cookie将Session ID发送给客户端
- 客户端后续请求携带此Session ID
- 服务器根据Session ID查找对应的会话数据
特点:
- 数据存储在服务器端
- 更安全(敏感信息不会在客户端存储)
- 会占用服务器资源
- 通常依赖Cookie传递Session ID
使用场景:
- 用户登录状态维护
- 敏感数据的临时存储
Token(通常指JWT)
Token(如JWT - JSON Web Token)是一种无状态的认证机制。
结构:
- Header:算法和token类型
- Payload:包含声明(用户ID、过期时间等)
- Signature:用于验证token完整性的签名
特点:
- 无状态(服务器不需要存储会话信息)
- 可以跨域使用
- 自包含(所有必要信息都在token中)
- 通常通过Authorization头发送
使用场景:
- 前后端分离应用
- 跨服务认证
- API认证
- 移动应用认证
三者对比
| 特性 | Cookie | Session | Token |
|---|---|---|---|
| 存储位置 | 客户端 | 服务器端 | 客户端 |
| 安全性 | 较低 | 较高 | 取决于实现 |
| 扩展性 | 有限 | 受服务器资源限制 | 高(无状态) |
| 跨域支持 | 有限制 | 依赖Cookie | 完全支持 |
| 数据大小限制 | 有(约4KB) | 无 | 通常较大但有限制 |
现代应用中的典型使用
现代Web应用通常结合使用这些技术:
- 使用Token(如JWT)进行认证
- 使用HttpOnly、Secure Cookie存储刷新令牌
- 使用Session存储敏感临时数据(如多因素认证状态)
选择哪种技术取决于应用的具体需求、安全考虑和架构设计。
Comments NOTHING