为网站改用分区 Cookie 时,您可能会遇到以下情况: 如果分区和未分区 Cookie 具有相同的位置,则会出现意外行为 名称。
设置分区 Cookie 不会替换或替换现有 具有相同名称的未分区 Cookie。两者存在,前提是第三方 Cookie 已启用,但保存在单独的 Cookie 罐中。当第三方 Cookie 被 则系统仅接受分区分区。如果这两个 Cookie 都 因此无法以编程方式分辨哪个是已分区的, 否则可能会导致意外行为。
您可以通过两种方法解决此问题: 1.让要替换的 Cookie 失效 2.重命名 Cookie
主要注意事项
在改用分区 Cookie 时,请注意以下几点:
- 无法以程序化方式确定 或未分区不过,您可以确定 Cookie 的分区状态。
- 分区 Cookie 不会覆盖未分区的 Cookie - 两个 Cookie
完全相同(即具有相同的属性,如名称、域名或路径)
如果只有一个 Cookie 具有
Partitioned
属性,则系统会将前者视为单独的 Cookie。 - 最好避免同时具有分区 和 Cookie 以及 同一网络调用。
让要替换的 Cookie 失效
如果您的网站或服务无法适应名称的变更,您可以创建一个
新的分区 Cookie,但现有的未分区 Cookie 会过期。虽然
无法确定是否对 Cookie 进行了分区,Set-Cookie
不包含 Partitioned
属性的标头不会影响未分区的 Cookie。
以下示例展示了如何使名为 example
的未分区 Cookie 失效,并使所有已分区 Cookie 不受影响,即使它们具有相同的名称也是如此。一种新的
将添加或更新名为 cookieName
的分区 Cookie(如果已设置)
存在。
Set-Cookie: example=-1;HttpOnly;SameSite=None;Secure;Max-Age:0
Set-Cookie: cookieName=value;Secure;SameSite=None;MaxAge=34560000;Partitioned
重命名 Cookie
确保顺畅转换的最可靠方法是使用 为分区和未分区 Cookie 指定不同的名称。例如,如果 您有一个名为“example”的未分区 Cookie,可以将其迁移到 分区 Cookie。
Set-Cookie: example-partitioned=value;Secure;SameSite=None;MaxAge=34560000;Partitioned
由于 Cookie 的有效期没有以编程方式公开,因此 设置新 Cookie 的有效期,使其与未分区 Cookie 的有效期。刷新 Cookie 的值可能比较实用 。
维护已分区和未分区的 Cookie
在过渡期间,不妨考虑保留两个单独的同步 Cookie:
一个是已分区的,另一个不是例如,您可以同时设置
auth
和 auth-partitioned
Cookie,其中后者通过
Partitioned
属性。
每次更新该值时,您都应该尝试同时设置这两个 Cookie。
- 对于拦截第三方 Cookie 但尚不支持 CHIPS 的客户端: 两个 Cookie 都不会被接受
- 对于阻止第三方 Cookie 并支持 CHIPS 的客户端:
auth
Cookie 会被拒绝,但auth-partitioned
个 Cookie 会被接受。 - 在不会阻止第三方 Cookie 的客户端上(不管是
它们支持 CHIPS:
auth
和auth-partitioned
都被接受。
当您的应用需要读取身份验证 Cookie 时,您应该查看
auth-partitioned
;但如果您必须暂时回滚
您可以回退到查找 auth
Cookie。
在您确定大部分用户都使用过
其 Cookie 被刷新后,auth-partitioned
Cookie 可能会被停用,而
可以将分区属性添加到常规身份验证 Cookie 中。