引入
HTTP 请求默认彼此独立。用户登录后,浏览器为什么能在后续请求中继续识别用户?其中一种常见答案是 Cookie:服务器通过响应告诉浏览器保存一小段数据,浏览器再按规则自动带回。
正文
定义
Cookie 是服务器通过
Set-Cookie响应头交给浏览器保存的键值数据。满足域名、路径和安全条件时,浏览器会在后续请求的Cookie请求头中自动携带它。
基本流程
- 服务器响应中返回
Set-Cookie。 - 浏览器保存 Cookie,并记录它的作用域和过期规则。
- 后续匹配的请求自动携带
Cookie。 - 服务器根据 Cookie 中的信息查找会话或判断请求上下文。
常见属性
| 属性 | 作用 | 需要注意的地方 |
|---|---|---|
Expires / Max-Age | 控制过期时间 | 不设置时通常是会话 Cookie |
Domain | 控制可发送到哪些域名 | 范围过大可能扩大泄露影响 |
Path | 控制可发送到哪些路径 | 不是访问权限控制机制 |
Secure | 只通过 HTTPS 发送 | 生产环境应优先使用 |
HttpOnly | 禁止 JavaScript 通过 document.cookie 读取 | 可降低 XSS 窃取 Cookie 的风险 |
SameSite | 限制跨站请求携带 Cookie | 需要结合登录和跨站场景配置 |
Cookie 的常见用途
- 保存会话标识,让服务器识别登录用户。
- 保存用户偏好,例如主题或语言。
- 配合缓存、实验分流或统计功能使用。
Cookie 适合保存标识,不适合直接保存密码、完整用户资料或其他高敏感信息。即使设置了 HttpOnly,Cookie 仍可能受到 CSRF、会话固定或服务端校验不足等问题影响。
Cookie 与 Session
Cookie 通常存放在客户端;Sessioin 通常把实际会话数据放在服务器端,Cookie 只保存会话标识。两者不是互斥关系,而是经常组合使用。
引出
使用 Cookie 做身份认证时,重点不只是“能否保持登录”,还要检查 Secure、HttpOnly、SameSite、过期时间和注销后的失效处理。跨域请求时,还需要结合 CORS 和 credentials 配置一起排查。