小编典典

本地主机上具有显式域的 Cookie

all

我一定错过了一些关于 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 是不可能的。


阅读 70

收藏
2022-05-23

共1个答案

小编典典

根据设计,域名必须至少有两个点;否则浏览器会认为它们无效。(参见http://curl.haxx.se/rfc/cookie_spec.html上的参考资料)

工作时, 必须完全省略*localhostcookie 域。您不应将其设置为or或代替. 那还不够。
*""``NULL``FALSE``"localhost"

对于
PHP,请参阅http://php.net/manual/en/function.setcookie.php#73107上的评论。

如果使用 Java Servlet API,则根本不要调用该cookie.setDomain("...")方法。

2022-05-23