2010-02-17 113 views
17

某些应用程序(不是我自己编写的,而不是PHP)会为域名“www.domain.com”创建一个cookie。php setcookie域名

我想替换那个cookie。因此,在PHP我做:

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

不过是为域创建的结果的cookie:“.www.domain.com”,注意点“”在领域之前。

因此它不会取代它,它会创建另一个cookie。 我能做什么?

+0

域名'www.domain.com'和'.www.domain.com'(注意前导点)的处理方式相同,至少按照RFC 6265,这是每个*现代浏览器实现的内容。它说,领先的点只是*忽略*。但是,如果cookie不能成功覆盖对方,这可能是由于“路径”,“域”,“安全”或“httpOnly”属性的差异,我们在这里看不到。一般来说,您可以尝试https://github.com/delight-im/PHP-Cookie以更轻松地管理cookie。 – caw 2016-07-12 23:30:22

回答

31

问题也在这里不客气:If you want to restrict the cookie to a single host, supply the domain parameter as an empty string

您也可以尝试 “.domain.com” 作为域名:由 “扎哈” http://php.net/manual/en/function.setcookie.php

见注释。尾部的点将允许所有子域的cookie用于“domain.com”,并可以覆盖“www。” - cookie,但我会首先使用上述解决方案。

+4

+1未指定域是关键。 – Gumbo 2010-02-18 10:27:33

+0

我也在寻找这个答案,果然,让域名保持空白。谢谢。 – 2010-03-25 05:26:48

+1

被警告,如果您使用域名为空的字符串,您可能会发现一些浏览器会感到困惑。如果可以的话,使用getenv('HTTP_HOST') – 2011-09-08 12:47:51

-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,看看你是否仍然遇到同样的问题。

4

如果你指定一个域,你应该遵循RFC 2109并用一个点作为域的前缀;否则客户会这样做。但是,如果您根本不指定域,则客户端将接受请求的域。