我一定错过了一些关于 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 是不可能的。
根据设计,域名必须至少有两个点;否则浏览器会认为它们无效。(参见http://curl.haxx.se/rfc/cookie_spec.html上的参考资料)
工作时, 必须完全省略*localhostcookie 域。您不应将其设置为or或代替. 那还不够。 *""``NULL``FALSE``"localhost"
localhost
""``NULL``FALSE``"localhost"
对于 PHP,请参阅http://php.net/manual/en/function.setcookie.php#73107上的评论。
如果使用 Java Servlet API,则根本不要调用该cookie.setDomain("...")方法。
cookie.setDomain("...")