HTTP中的多个Set-cookie标头

Sco*_*ott 28 browser http http-headers

我正在编写一个充当非常基本的HTTP客户端的小类.作为我正在进行的项目的一部分,我正在让它识别cookie.但是,我不清楚当我的客户端收到多个具有相同密钥但设置了不同值的"Set-Cookie"标头时会发生什么.

例如,

Set-Cookie: PHPSESSID=abc; path=/
Set-Cookie: PHPSESSID=def; path=/
Set-Cookie: PHPSESSID=ghi; path=/
Run Code Online (Sandbox Code Playgroud)

其中哪一项应该是PHPSESSID的价值?当您在同一页面上调用session_start()然后调用session_regenerate_id()时,通常会发生这种情况.每个都会设置自己的标题.所有的浏览器似乎都没有这个,但我似乎无法让我的客户选择正确的.

有任何想法吗?!

Sni*_*ves 28

RFC 6265第4.1.2节规定:

如果用户代理接收到具有相同cookie名称,
域值和路径值的新cookie作为其已存储
的cookie ,则将现有cookie逐出并替换为新cookie.
请注意,服务器可以通过向用户代理发送
带有Expires属性的新cookie 来删除cookie,该属性具有过去的值.

所以我会按顺序处理标题,如果有重复则覆盖它们.所以在你的情况下你只有一个PHPSESSID = ghi.


Bra*_*och 20

RFC 6265规定:

服务器不应该在具有相同cookie名称的同一响应中包含多个Set-Cookie头字段.

因此,如果您的服务使用相同的密钥发送多个Set-Cookie标头,我会非常担心.特别是因为我看到用户代理和代理行为异常 - 有时采用第一个标头的值,有时会重新排列标头.

作为客户端,典型的用户代理行为似乎是采用最后一个头的值.RFC使用此语句暗示了该行为:

如果用户代理接收到具有相同cookie名称,域值和路径值的新cookie作为其已存储的cookie,则将现有cookie逐出并替换为新cookie.

  • 这并不是说不应发送多个 set-cookie 标头。它表示多个标头具有相同的 cookie 名称。 (3认同)