为啥 Chrome 和 Safari 看不到某些子域的 cookie?

Posted

技术标签:

【中文标题】为啥 Chrome 和 Safari 看不到某些子域的 cookie?【英文标题】:Why does Chrome and Safari not see cookies for some sub-domains?为什么 Chrome 和 Safari 看不到某些子域的 cookie? 【发布时间】:2012-05-13 08:50:49 【问题描述】:

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

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

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

【问题讨论】:

看看Can subdomain.example.com set a cookie that can be read by example.com 是的,看那个帖子让我觉得 Firefox 是正确的,而 Chrome 和 Safari 不能正常工作。就像我说的,第一级子域有效,但不是两个级别。如果 cookie 被定义为 .example.com,我希望 www.example.com 和 something.wwww.example.com 都可以工作。我想我希望有人知道为什么 Chrome 会发生这种情况,或者是否有解决方法。 【参考方案1】:

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

您可能会发现这篇文章很有用:https://serverfault.com/questions/153409/can-subdomain-example-com-set-a-cookie-that-can-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 字符串。 (所以,x.y.com 域匹配 .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 的某种组合,隐含地没有前导点(如 twitter.com 所做的)或设置域值(带有前导点)并重定向到像 www.example.com 这样的服务器(就像 google.com 一样)。

【讨论】:

如原始问题中所述,已尝试使用前导点。

以上是关于为啥 Chrome 和 Safari 看不到某些子域的 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

在iPhone上提示下载Safari和Chrome

为啥这个 CSS3 动画在 Safari 和 Chrome 中不起作用?

为啥我的 Web 应用在 iOS(Chrome 和 Safari)上滚动超级慢,但在所有其他平台上都可以?

为啥简单的网站会在移动设备上崩溃(至少是 iOS Safari 和 Chrome)?

为啥 jQuery 选择器适用于 Chrome,但不适用于 Safari?

为啥这些 Javascript for 循环在 Firefox 上比 Chrome / Safari 慢得多?