PHP cookie写在不正确的域上

时间:2010-07-06 19:37:27

标签: php cookies setcookie

我有一个我在我的应用上使用的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。

3 个答案:

答案 0 :(得分:1)

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

答案将在php手册的帖子中讨论。

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

答案 1 :(得分:0)

来自文档:

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

尾部匹配规范在这里:

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

答案 2 :(得分:0)

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

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

预期的Cookie数据:

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

奇怪,但它确实有效。