某些应用程序(不是我编写的,而不是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。 我该怎么办?
答案 0 :(得分:37)
这个问题也在这里得到了解决: http://php.net/manual/en/function.setcookie.php
请参阅“jah”评论:If you want to restrict the cookie to a single host, supply the domain parameter as an empty string
你也可以尝试“.domain.com”作为域名。尾随点将允许“domain.com”的所有子域名的cookie,并且可以覆盖“www。” - cookie,但我将首先使用上述解决方案。
答案 1 :(得分:5)
如果指定域,则应遵循RFC 2109并在域前加一个点;否则客户会这样做。但是,如果您根本没有指定域,则客户端将获取请求的域。
答案 2 :(得分:0)
这不像是个错误吗?
如果我想让Cookie仅仅位于www.example.com
而不是something.www.example.com
怎么办?例如为了表现。
我应该能够指定Cookie域,而不是所有[sub] [sub]子域的通配符。
更不用说它引起的大量错误,例如,通过php设置cookie并尝试通过JavaScript删除它(不会添加愚蠢的点)。
答案 3 :(得分:-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,看看你是否还有同样的问题。