gpt4 book ai didi

http - 如何处理同名的多个cookie?

转载 作者:可可西里 更新时间:2023-11-01 15:03:32 35 4
gpt4 key购买 nike

例如,我有一个应用程序发送以下 HTTP header 以设置为名为“a”的 cookie:

Set-Cookie: a=1;Path=/;Version=1
Set-Cookie: a=2;Path=/example;Version=1

如果我访问服务器上的 /example 两个路径都是有效的,所以我有两个名为“a”的 cookie!由于浏览器不发送任何路径信息,因此无法区分这两个cookie。

Cookie: a=2; a=1

这个案子应该怎么处理?选第一个?创建一个包含所有 cookie 值的列表?还是应该将这种情况视为开发者的错误?

最佳答案

引用 SitePoint 上一篇文章的答案并不完全完整。请看RFC 6265 (公平地说,此 RFC 是在发布此问题后于 2011 年发布的,它取代了之前 2000 年的 RFC 2965 和 1997 年的 RFC 2109)。

5.4 ,第 2 小节是这样说的:

The user agent SHOULD sort the cookie-list in the following order:

  • Cookies with longer paths are listed before cookies with shorter paths.

NOTE: Not all user agents sort the cookie-list in this order, but thisorder reflects common practice when this document was written, and,historically, there have been servers that (erroneously) depended onthis order.

4.2.2 部分也有这个小 gem 。 :

... servers SHOULD NOT rely upon the serialization order. Inparticular, if the Cookie header contains two cookies with the samename (e.g., that were set with different Path or Domain attributes),servers SHOULD NOT rely upon the order in which these cookies appear in the header.

在您的示例请求 cookie (Cookie: a=2; a=1) 中,请注意使用路径 /example (a=2 ) 的路径比路径为 / (a=1) 的路径更长,因此它首先返回给您,这与规范的推荐。因此,您可以选择第一个值的假设或多或少是正确的。

不幸的是,RFC 中使用的语言非常具体 - 应该不应该 这两个词的使用在 RFC 中引入了歧义。这些表示应该遵循的约定,但不是必需以符合规范。虽然我非常了解 RFC,但我还没有研究过真实世界的客户在做什么;一个或多个浏览器或其他充当 HTTP 客户端的软件可能不会首先在 Cookie: header 中发送最长路径 cookie(例如:/example)。

如果您能够控制 cookie 的值并且希望使您的解决方案万无一失,那么您最好选择:

  1. 使用不同的 cookie 名称覆盖某些路径,例如:
  • 设置 cookie:a-global=1;Path=/;Version=1
  • 设置 cookie:a-example=2;Path=/example;Version=1
  1. 在 cookie 值本身中存储您需要的路径:
  • 设置 cookie:a=1&path=/;Path=/;Version=1
  • 设置 cookie: a=2&path=/example;Path=/example;Version=1

这两种解决方法都需要在服务器上使用额外的逻辑来选择所需的 cookie 值,方法是将请求的 URL 与可用 cookie 列表进行比较。它不太漂亮。不幸的是,RFC 没有先见之明要求较长的路径完全覆盖具有较短路径的 cookie(例如:在您的示例中,您将收到 Cookie: a=2 only).

关于http - 如何处理同名的多个cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4056306/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com