2

我正在尝试确定 HTTP 服务器返回的 cookie 覆盖现有 cookie 与设置新 cookie 的场景。

假设 foo.example.com 设置了一个 cookie:

设置 Cookie:SSID=abc;域=.example.com;路径=/abc; 到期=格林威治标准时间 2021 年 1 月 13 日星期三 22:23:01;安全的; HttpOnly

bar.example.com 需要设置哪些属性才能覆盖此 cookie 而不是创建新的?特别是,以下响应标头会覆盖原始 cookie:

设置 Cookie:SSID=xyz;域=.example.com;过期=周三,1990 年 1 月 13 日 22:23:01 GMT;

跨浏览器的行为是否一致?

4

1 回答 1

2

根据RFC 6265

如果用户代理接收到一个新的 cookie,其 cookie 名称、域值和路径值与它已经存储的 cookie 相同,则现有的 cookie 将被驱逐并替换为新的 cookie。

该声明在 RFC 中存在超过 10 年,只是措辞略有变化,所以我认为这种行为在所有浏览器中都是一致的。

在您的示例中,两个 cookie 具有不同的路径('/'默认情况下第二个假定),因此它们将被视为不同的 cookie。对于第一个 cookie 的路径中的页面,将有两个同名的 cookie,因此它们由浏览器根据 RFC 进行处理,如下所示:

如果多个 cookie 满足上述条件,它们将在 Cookie 标头中排序,以便具有更具体 Path 属性的那些优先于那些不太具体的。

于 2012-10-16T18:08:28.333 回答