引入

HTTP 请求默认彼此独立。用户登录后,浏览器为什么能在后续请求中继续识别用户?其中一种常见答案是 Cookie:服务器通过响应告诉浏览器保存一小段数据,浏览器再按规则自动带回。

正文

定义

Cookie 是服务器通过 Set-Cookie 响应头交给浏览器保存的键值数据。满足域名、路径和安全条件时,浏览器会在后续请求的 Cookie 请求头中自动携带它。

基本流程

  1. 服务器响应中返回 Set-Cookie
  2. 浏览器保存 Cookie,并记录它的作用域和过期规则。
  3. 后续匹配的请求自动携带 Cookie
  4. 服务器根据 Cookie 中的信息查找会话或判断请求上下文。

常见属性

属性作用需要注意的地方
Expires / Max-Age控制过期时间不设置时通常是会话 Cookie
Domain控制可发送到哪些域名范围过大可能扩大泄露影响
Path控制可发送到哪些路径不是访问权限控制机制
Secure只通过 HTTPS 发送生产环境应优先使用
HttpOnly禁止 JavaScript 通过 document.cookie 读取可降低 XSS 窃取 Cookie 的风险
SameSite限制跨站请求携带 Cookie需要结合登录和跨站场景配置
  • 保存会话标识,让服务器识别登录用户。
  • 保存用户偏好,例如主题或语言。
  • 配合缓存、实验分流或统计功能使用。

Cookie 适合保存标识,不适合直接保存密码、完整用户资料或其他高敏感信息。即使设置了 HttpOnly,Cookie 仍可能受到 CSRF、会话固定或服务端校验不足等问题影响。

Cookie 通常存放在客户端;Sessioin 通常把实际会话数据放在服务器端,Cookie 只保存会话标识。两者不是互斥关系,而是经常组合使用。

引出

使用 Cookie 做身份认证时,重点不只是“能否保持登录”,还要检查 SecureHttpOnlySameSite、过期时间和注销后的失效处理。跨域请求时,还需要结合 CORS 和 credentials 配置一起排查。