Cookie与Session机制详解
简介
HTTP协议本身是无状态的,这意味着服务器无法识别多次请求是否来自同一用户。为了解决这个问题,引入了Cookie和Session机制。它们用于在客户端和服务器之间保持状态信息,实现用户身份识别、购物车、登录状态等功能。
Cookie机制
- 基本概念
- Cookie是由服务器发送给浏览器并存储在客户端的小段数据
- 浏览器会在后续请求中自动将Cookie发送回服务器
- 每个Cookie都有名称、值和相关属性
- Cookie属性
- Name/Value: Cookie的名称和值
- Expires/Max-Age: 过期时间
- Domain: 作用域域名
- Path: 作用路径
- Secure: 只在HTTPS下传输
- HttpOnly: 防止XSS攻击
- SameSite: 防止CSRF攻击
- Cookie工作流程
- 服务器通过Set-Cookie响应头发送Cookie
- 浏览器存储Cookie
- 后续请求中浏览器自动在Cookie请求头中携带Cookie
- 服务器读取Cookie识别用户状态
Session机制
- 基本概念
- Session是存储在服务器端的用户会话数据
- 通过Session ID来标识不同的用户会话
- Session ID通常通过Cookie传递
- Session工作流程
- 用户访问服务器,服务器创建Session并生成Session ID
- 服务器通过Cookie将Session ID发送给浏览器
- 浏览器存储Session ID的Cookie
- 后续请求中浏览器发送Session ID
- 服务器根据Session ID找到对应的Session数据
- Session存储方式
- 内存存储: 最快但重启后丢失
- 文件存储: 持久化但性能较低
- 数据库存储: 持久化且可共享
- 缓存存储: Redis、Memcached等
Cookie与Session对比
- 存储位置
- Cookie存储在客户端浏览器
- Session存储在服务器端
- 安全性
- Cookie可能被窃取或篡改
- Session相对更安全,但需要保护Session ID
- 存储容量
- 单个Cookie限制4KB,每个域名下通常限制20-50个Cookie
- Session理论上只受服务器内存限制
- 性能影响
- Cookie随请求发送,增加网络传输
- Session增加服务器存储和查找开销