<ph type="x-smartling-placeholder">
浏览器支持
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
每个 Cookie 包含一个键值对以及一些属性 控制 Cookie 的使用时间和位置。
引入了 SameSite
属性(在
RFC6265bis)
可让您声明自己的 Cookie 是仅限第一方使用,还是仅限
同一网站的内容。了解确切的“网站”这里的含义。
网站是域名后缀和域名的一部分
。例如,www.web.dev
网域是 web.dev
网站的一部分。
关键词:如果用户在 www.web.dev
上向以下用户请求图片:
static.web.dev
,这是同一网站请求。
公共后缀列表定义了将哪些网页计为
位于同一网站上。它不仅依赖于 .com
等顶级域名,
但还可以包含 github.io
等服务。这样一来,
将 your-project.github.io
和 my-project.github.io
视为不同的网站。
关键词:如果用户在 your-project.github.io
上向以下用户请求图片:
my-project.github.io
,即为跨网站请求。
使用 SameSite
属性声明 Cookie 用法
Cookie 的 SameSite
属性提供三种不同的控制方法,
这种行为。您可以选择不指定该属性,也可以使用
Strict
或 Lax
,用于将 Cookie 限制为同网站请求。
如果您将 SameSite
设置为 Strict
,则 Cookie 只能在
第一方环境也就是说,如果 Cookie 网站与所显示的网站
。因此,如果 promo_shown
Cookie 的设置如下:
Set-Cookie: promo_shown=1; SameSite=Strict
当用户访问您的网站时,Cookie 会按预期随请求一起发送。
不过,如果用户点击链接进入您的网站,
而不会发送初始请求。
这对与始终位于初始配置的功能相关的 Cookie 非常有用
例如更改密码或购物
对 promo_shown
等 Cookie 设置限制。如果您的读者打开此链接
网站,那么他们希望发送 Cookie 以便应用其偏好设置。
SameSite=Lax
允许浏览器发送这些顶级
导航。例如,如果其他网站引用了您的网站内容,
在这种情况下,您可以使用自己的猫咪照片并提供文章链接作为
如下:
<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>
将 Cookie 设置为 Lax
后,如下所示:
Set-Cookie: promo_shown=1; SameSite=Lax
当浏览器为其他人的博客请求 amazing-cat.png
时,您的
网站不发送 Cookie不过,当读者
链接到 cat.html
的网站,则该请求包含 Cookie。
我们建议以这种方式使用 SameSite
,并设置会影响网站的 Cookie
向 Lax
显示相关数据,并向 Strict
显示与用户操作相关的 Cookie。
您还可以将 SameSite
设置为 None
,以指明您希望 Cookie
在所有上下文中发送。如果您提供了可供其他网站使用的服务(例如
小部件、嵌入内容、联属计划、广告或登录,
多个网站,请使用 None
确保您的意图清晰明确。
不使用 SameSite 的默认行为变更
浏览器支持
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
SameSite
属性得到了广泛支持,但未被广泛采用。
过去,在不使用 SameSite
的情况下设置 Cookie 时,默认会将 Cookie 发送到
所有上下文,这使得用户容易受到 CSRF 的影响并在无意间造成
信息泄露。鼓励开发者表明自己的意图
并为用户提供更安全的体验、IETF 提案,
提升 Cookie 效果
列出了两项主要变更:
- 没有
SameSite
属性的 Cookie 被视为SameSite=Lax
。 SameSite=None
的 Cookie 还必须指定Secure
,这意味着它们需要 安全上下文。
这两项更改均向后兼容
实现了旧版 SameSite
属性,以及
不支持早期 SameSite
版本的浏览器。它们旨在
减少开发者的完全依赖浏览器的默认行为是
行为和预期用途。任何无法识别您
SameSite=None
应忽略它。
默认SameSite=Lax
如果您在发送 Cookie 时未指定其 SameSite
属性,则浏览器
将该 Cookie 视为设置为 SameSite=Lax
。我们仍然建议您
明确设置 SameSite=Lax
,以提供更一致的用户体验
。
SameSite=None
必须是安全的
使用 SameSite=None
创建跨网站 Cookie 时,您还必须设置这些 Cookie
到 Secure
,以便浏览器接受:
Set-Cookie: widget_session=abc123; SameSite=None; Secure
从 Chrome 76 开始,您可以启用
about://flags/#cookies-without-same-site-must-be-secure
,以及 Firefox 69
通过在network.cookie.sameSite.noneRequiresSecure
about:config
。
此外,我们还建议您尽快将现有 Cookie 更新为 Secure
。
如果您依赖在您的网站上提供第三方内容的服务,请确保
您的服务提供商会更新其 Cookie,以及更新所有代码段或
依赖项,以确保网站使用新行为。
SameSite
饼干食谱
有关如何更新 Cookie 以成功处理这些
SameSite=None
的变化和浏览器行为的差异,请参阅
后续文章:SameSite Cookie 诀窍。
感谢 Lily Chen、Malte Ubl 和 Mike 的贡献和反馈 West、Rob Dodson、Tom Steiner 和 Vivek Sekhar。
Cookie 主打图片提供方 皮利-里恩·普里斯克 (Pille-Riin Priske) 已开启 不启动