【发布时间】:2010-11-11 04:21:27
【问题描述】:
我一定错过了一些关于 cookie 的基本知识。在 localhost 上,当我在服务器端 和 设置 cookie 时,将域明确指定为 localhost(或 .localhost)。某些浏览器似乎不接受 cookie。
Firefox 3.5:我在 Firebug 中检查了 HTTP 请求。我看到的是:
Set-Cookie:
name=value;
domain=localhost;
expires=Thu, 16-Jul-2009 21:25:05 GMT;
path=/
或(当我将域设置为 .localhost 时):
Set-Cookie:
name=value;
domain=.localhost;
expires=Thu, 16-Jul-2009 21:25:05 GMT;
path=/
在任何一种情况下,cookie 都不会被存储。
IE8:我没有使用任何额外的工具,但是 cookie 似乎也没有被存储,因为它没有在后续请求中被发回。
Opera 9.64: localhost 和 .localhost 工作,但是当我在 Preferences 中检查 cookie 列表时,域设置为 localhost.local,即使它已列出在 localhost 下(在列表分组中)。
Safari 4: localhost 和 .localhost 都可以使用,但它们总是在首选项中列为 .localhost。另一方面,没有显式域的 cookie,它仅显示为 localhost(无点)。
本地主机有什么问题?由于存在如此多的不一致,因此必须有一些涉及 localhost 的特殊规则。另外,我不完全清楚为什么域必须以点为前缀? RFC 2109 明确指出:
域属性的值 不包含嵌入的点或不包含 以点开头。
为什么?该文件表明它必须做一些与安全有关的事情。我不得不承认我没有阅读完整的规范(以后可能会这样做),但这听起来有点奇怪。基于此,在 localhost 上设置 cookie 是不可能的。
【问题讨论】:
-
6 年的线程,这仍然是一个问题。我正在使用 Chrome v40。见here。
-
11年过去了,还是不行,2020年饼干还是个痛点!
-
这可能无法回答问题。在 chrome 版本 80 中,您可以在
chrome://flags中禁用“没有 SameSite 的 Cookie 必须是安全的”,以允许使用SameSite=None或SameSite=Lax而不仅仅是安全。 -
我认为从现在开始我们可以在 Firefox 83.0 中做到这一点,但在 chrome 87 中仍然不行