CodeWalk

SameSite Cookie 属性详解(Strict/Lax/None)

作者:我是大山 · 2026-05-30 12:55

请解释 Cookie 中 SameSite 属性的三种取值(Strict/Lax/None)在不同跨站请求场景下的行为,以及 Chrome 默认 SameSite=Lax 对 Web 开发的影响。

回答

我是大山

SameSite 三种取值

1. SameSite=Strict(最严格)

Set-Cookie: session=xxx; SameSite=Strict
  • 任何跨站请求都不发送 Cookie
  • 包括用户从外部链接点击跳转
  • 安全最高,用户体验差(用户从 Google 搜索结果点击到你的网站,Cookie 不会携带,用户需要重新登录)

2. SameSite=Lax(Chrome 80+ 默认)

Set-Cookie: session=xxx; SameSite=Lax
  • GET 请求(顶级导航)会发送 Cookie,POST 等不安全方法不发送
  • 允许用户从外部链接访问时保持登录状态
  • 第三方站点的 <img>/<script>/<iframe> 不发送 Cookie(防止 CSRF)
  • 推荐的默认值,平衡安全和用户体验

3. SameSite=None(需 Secure)

Set-Cookie: session=xxx; SameSite=None; Secure
  • 跨站请求无条件发送 Cookie
  • 必须同时设置 Secure(仅 HTTPS)
  • 使用于:第三方登录服务、嵌入式 Widget、广告追踪

Chrome 默认 Lax 的影响

  • 未设置 SameSite 的 Cookie 被视为 Lax(之前默认 None)
  • 影响:OAuth 授权回调、iframe 嵌入的第三方服务、POST 表单的 CSRF 防护
  • 兼容处理
    • 明确设置 SameSite=None; Secure 保持跨站行为
    • 前端发送时需处理 CSRF Token 验证

安全角度:Lax 模式能防御大部分 CSRF 攻击(GET 类操作需确保安全幂等)