3

我有一个为 example.com 生成 cookie 的网站。它可以在 Firefox、Chrome 18 和 Safari 中通过http://example.comhttp://www.example.com 访问。但是,我无法在 webkit 派生的浏览器中从http://test.me.example.com访问 cookie。它适用于火狐。

在从 javascript 设置 cookie 时,我已经使用 domain= example.com 和 .example.com 之一对此进行了测试。

cookie 的路径为 / 并设置了过期时间。

4

1 回答 1

0

你如何指定子域?Chrome 期望子域的 cookie 以点为前缀,例如 domain=.example.com

您可能会发现这篇文章很有用:https ://serverfault.com/questions/153409/can-subdomain-example-com-set-a-cookie-that-c​​an-be-read-by-example-com

引用您阅读的同一 RFC2109:

   * A Set-Cookie from request-host x.foo.com for Domain=.foo.com would
     be accepted.

所以 subdomain.example.com 可以为 .example.com 设置一个 cookie。到目前为止,一切都很好。

   The following rules apply to choosing applicable cookie-values from
   among all the cookies the user agent has.

   Domain Selection
        The origin server's fully-qualified host name must domain-match
        the Domain attribute of the cookie

那么我们有域匹配吗?

  • A 是 FQDN 字符串,格式为 NB,其中 N 是非空名称字符串,B 格式为 .B',B' 是 FQDN 字符串。(因此,xycom 域匹配 .y.com 而不是 y.com。)但是现在 example.com 不会根据定义与 .example.com 域匹配。但是 www.example.com (或域中的任何其他“非空名称”)> > 会。该 RFC 理论上已被 RFC2965 淘汰,后者规定了在 Set-Cookie2 操作上强制域的前导点。

正如@Tony 所指出的,更重要的是现实世界。有关实际用户代理正在做什么的一瞥,请参阅

Firefox 3 的 nsCookieService.cpp 和

Chrome 的 cookie_monster.cc 要了解实际站点在做什么,请尝试使用 wget 使用 > --save-cookies、--load-cookies 和 --debug 来查看发生了什么。

您可能会发现,实际上大多数站点都在使用旧 RFC 规范中的 Set->> Cookie 与“Host”值的某种组合,隐含地没有前导点(如 twitter.com 所做的)或设置域值(带有前导点)并重定向到像 www.example.com 这样的服务器(就像 google.com 一样)。

于 2015-07-24T04:37:27.487 回答