我一定错过了一些关于 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 都可以工作,但它们总是在 Preferences 中列为 .localhost。另一方面,没有显式域的 cookie,它仅显示为 localhost(无点)。
本地主机有什么问题?由于存在如此多的不一致,因此必须有一些涉及 localhost 的特殊规则。此外,我并不完全清楚为什么域必须以点为前缀?RFC 2109 明确指出:
Domain 属性的值不包含嵌入的点或不以点开头。
为什么?该文件表明它必须做一些与安全有关的事情。我不得不承认我没有阅读完整的规范(以后可能会这样做),但这听起来有点奇怪。基于此,在 localhost 上设置 cookie 是不可能的。