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

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

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

预期的cookie数据:

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

很奇怪,但是有效。

其他提示

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

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

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

从文档中:

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

尾巴匹配规格在这里:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top