小编典典

How do browser cookie domains work?

all

由于我遇到了奇怪的域/子域 cookie 问题,我想知道浏览器如何处理 cookie。如果他们以不同的方式做到这一点,那么了解这些差异也将是一件好事。

换句话说 - 当浏览器收到一个 cookie 时,该 cookie 可能有一个域和一个附加到它的路径。或者不是,在这种情况下,浏览器可能会用一些默认值代替它们。问题1:它们是什么?

稍后,当浏览器即将发出请求时,它会检查其 cookie 并过滤掉它应该为该请求发送的那些。它通过将它们与请求路径和域进行匹配来做到这一点。问题2:匹配规则是什么?


添加:

我问这个的原因是因为我对一些边缘情况感兴趣。喜欢:

  • cookie.example.com可以用于www.example.com吗?
  • cookie.example.com可以用于example.com吗?
  • cookieexample.com可以用于www.example.com吗?
  • cookieexample.com可以用于anotherexample.com吗?
  • www.example.com可以设置cookie吗example.com
  • www.example.com可以设置cookie吗www2.example.com
  • www.example.com可以设置cookie吗.com
  • 等等。

添加2:

另外,有人可以建议我应该如何设置一个cookie,以便:

  • 可以通过www.example.com或设置example.com
  • www.example.com和都可以访问它example.com

阅读 129

收藏
2022-03-18

共1个答案

小编典典

尽管现在应该定义 cookie 的RFC 2965Set-Cookie2已经过时的RFC 2109),但大多数浏览器并不完全支持它,而只是遵守Netscape 的原始规范

Domain属性值和有效域是有区别的:前者取自Set-Cookie头域,后者是该属性值的解释。根据 RFC 2965,以下内容应适用:

  • 如果Set-Cookie头域没有Domain属性,则有效域为请求的域。
  • 如果存在Domain属性,则其值将用作有效域(如果该值不以 a 开头,.则由客户端添加)。

拥有有效域,它还必须与当前请求的域匹配以进行设置;否则 cookie 将被修改。相同的规则适用于选择要在请求中发送的 cookie。


将这些知识映射到您的问题上,应适用以下内容:

并为/通过*www.example.com*和*example.com.www.example.com设置和读取 cookie,分别为和设置它.example.com。但是第一个 ( .www.example.com) 只能被该域下的其他域访问(例如*foo.www.example.com*或*bar.www.example.com*),.example.com这些域也可以被*example.com下的任何其他域访问(例如foo. example.com*或*bar.example.com)。

2022-03-18