首页/网络/协议速查/Cookie 属性速查
HTTP 头与缓存70 条

Cookie 属性速查

Set-Cookie 的六大属性决定 Cookie 的生命周期、作用范围与安全边界:Expires、Max-Age、Domain、Path、Secure、HttpOnly、SameSite。

协议速查网络更新于 2026-10-13

Cookie 属性决定边界

服务端通过 Set-Cookie 响应头下发 Cookie,属性决定它活多久、在哪些路径与子域生效、能不能被脚本读取以及跨站请求时会不会被带上。Expires 与 Max-Age 管生命周期,Domain 与 Path 管作用范围,Secure 与 HttpOnly 管传输与读取,SameSite 管跨站携带。会话类 Cookie 一旦漏配 Secure 或 HttpOnly,就等于把会话凭证暴露在明文链路或脚本里。

属性速查

属性作用建议
Expires绝对过期时间与 Max-Age 二选一,优先用 Max-Age
Max-Age相对存活秒数,设为 0 即删除会话态可省略,关闭浏览器即失效
Domain允许生效的子域范围能省则省,默认只作用于当前域
Path路径前缀匹配默认按目录,切得太细容易产生同名冲突
Secure只在 HTTPS 连接中发送会话 Cookie 必须配置
HttpOnly禁止脚本通过 document.cookie 读取会话 Cookie 必须配置
SameSite跨站携带策略:Strict 与 Lax 与 None默认按 Lax 理解;用 None 时必须配 Secure

设置与删除

设置与删除
curl -si https://app.example.com/login | grep -i set-cookie   # 观察服务端下发的属性
# 推荐的会话 Cookie 形态:
# Set-Cookie: sid=abc123; Path=/; Max-Age=3600; Secure; HttpOnly; SameSite=Lax
# 删除时必须与创建时的 Path 和 Domain 完全一致,否则删不掉:
# Set-Cookie: sid=; Path=/; Max-Age=0; Secure; HttpOnly

典型使用场景

  • 登录会话保持:会话标识放 HttpOnly 加 Secure 的 Cookie,避免被脚本读取
  • 跨站嵌入场景:第三方页面需要携带 Cookie 时必须用 SameSite=None 并配 Secure
  • 多子域共享登录态:需要显式设置 Domain,但要接受所有子域共享的风险
  • A 与 B 测试分流:用 Cookie 标记分组,注意 Path 与 Domain 要与站点结构匹配
  • 退出登录:按创建时的属性组合删除,否则浏览器会保留旧值

常见组合

场景推荐属性原因
会话 CookieHttpOnly 加 Secure 加 SameSite=Lax同时防脚本读取、明文传输与大部分跨站请求
跨站嵌入SameSite=None 加 Secure跨站携带必须显式声明,且只能走 HTTPS
长期偏好设置Max-Age 设置较长时间,Domain 收紧减少子域之间的相互影响
临时校验状态不设 Max-Age,保持会话级关闭浏览器后自动清理
敏感信息不要放进 CookieCookie 会随请求反复上传,也容易被中间设备记录
删除 Cookie 必须与创建时使用完全相同的 Path 与 Domain,否则浏览器会认为这是另一个 Cookie,用户会看到「点了退出登录但仍是已登录状态」。

易错点

  • 用 SameSite=None 却忘记配 Secure,Chrome 会直接拒绝这个 Cookie,表现为登录后立刻掉线
  • 删除时 Path 或 Domain 与原值不一致,浏览器保留旧 Cookie,退出登录失效
  • 把会话标识放在普通非 HttpOnly Cookie 里,一次 XSS 就能完整窃取登录态
  • Cookie 里塞入大量数据甚至敏感信息,每个请求都带着上传,既增加带宽也扩大泄漏面

数据来源与参考

  • RFC 6265 §4.1(属性语法)
  • RFC 6265bis(SameSite 语义)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌