25

一些不是我写的应用程序,也不是用 PHP 编写的,它为域“www.domain.com”创建了一个 cookie。

我正在尝试替换那个 cookie。所以在php中我做了:

setcookie('mycookie','mydata',time() + 2*7*24*60*60,'/','www.domain.com', false);

然而,生成的 cookie 是为域创建的:“.www.domain.com”,注意点“。” 在域之前。

所以它不会取代它,它会创建另一个 cookie。我能做些什么?

4

4 回答 4

41

这个问题也在这里解决: https ://www.php.net/manual/en/function.setcookie.php

请参阅jah的评论:

如果要将 cookie 限制为单个主机,请将域参数提供为空字符串

您也可以尝试.domain.com作为域。尾随点将允许所有子域的 cookiedomain.com并可以覆盖www.-cookie,但我将首先使用上述解决方案。

于 2010-02-18T10:14:18.547 回答
7

如果指定域,则应遵循 RFC 2109 并在域前加上点;否则客户会这样做。但是,如果您根本不指定域,则客户端将获取请求的域。

于 2010-02-18T10:29:39.763 回答
1

这不是一个错误吗?如果我希望我的 cookie 只是 atwww.example.com而不是 atsomething.www.example.com怎么办?例如性能。我应该能够指定 cookie 域而不是所有 [sub][sub] 子域的通配符。更不用说它导致的错误数量,例如通过 php 设置 cookie 并尝试通过 JavaScript 删除它(这不会添加愚蠢的点)。

于 2019-09-21T16:08:48.573 回答
-1

尝试创建其他几个具有相同名称但域不同的 cookie。例子:

setcookie('mycookie','mydata1',time() + 2*7*24*60*60,'/','www.domain.com', false);
setcookie('mycookie','mydata2',time() + 2*7*24*60*60,'/','www.domain.com', false);
setcookie('mycookie_top','mydata1',time() + 2*7*24*60*60,'/','domain.com', false);
setcookie('mycookie_top','mydata2',time() + 2*7*24*60*60,'/','domain.com', false);

然后在 Firebug 中检查这些命令创建的 cookie。如果你一直得到一个双重cookie,那么这可能是PHP中的一个错误。另外,尝试在javascript代码中设置cookie,看看你是否仍然遇到同样的问题。

于 2010-02-18T03:53:51.347 回答