6

我有一个在我的应用程序上使用的 cookie。它看起来像这样:

+-------+-------+-----------------------+-------+----------+
| Name  | Value | Domain                | Path  | Expires  |
+-------+-------+-----------------------+-------+----------+
| foo   | bar   | my.domain.tld         | /     | Session  |
+-------+-------+-----------------------+-------+----------+

在我的脚本的一部分中,基于某些条件,我试图更改 cookie 的值。我正在使用这段代码:

// overwrite cookie
if($condition){
  setcookie("foo", "cat", 0, "/", "my.domain.tld");
}

之后,我的 cookie 数据如下所示:

+-------+-------+-----------------------+-------+----------+
| Name  | Value | Domain                | Path  | Expires  |
+-------+-------+-----------------------+-------+----------+
| foo   | bar   | my.domain.tld         | /     | Session  |
| foo   | cat   | .my.domain.tld        | /     | Session  |
+-------+-------+-----------------------+-------+----------+

为什么.要在域前添加一个?我想覆盖现有的 cookie。

4

3 回答 3

1

http://www.php.net/manual/en/function.setcookie.php#93641

答案在 php 手册的一篇文章中讨论。

Cookie 数据由浏览代理设置,因此根据浏览器使用的进程进行不同的处理。

于 2010-07-06T19:41:11.357 回答
0

从文档中:

cookie 可用的域。要使 cookie 在 example.com 的所有子域上可用,您需要将其设置为“.example.com”。这 。不是必需的,但使其与更多浏览器兼容。将其设置为 www.example.com 将使 cookie 仅在 www 子域中可用。有关详细信息,请参阅 » 规范中的尾部匹配。

尾部匹配规范在这里:

http://curl.haxx.se/rfc/cookie_spec.html

于 2010-07-06T19:44:23.667 回答
0

事实证明,不指定域似乎有效:

setcookie("foo", "cat", 0, "/");

预期的 cookie 数据:

+-------+-------+-----------------------+-------+----------+
| Name  | Value | Domain                | Path  | Expires  |
+-------+-------+-----------------------+-------+----------+
| foo   | cat   | my.domain.tld         | /     | Session  |
+-------+-------+-----------------------+-------+----------+

奇怪,但它有效。

于 2010-07-06T19:49:31.543 回答