2013-03-07 88 views
1

我有一个奇怪的问题。我有一个脚本,将为每个访问过的页面添加一个数字到数组中,然后放入Cookie中。如果没有WWW或子域名,php cookies不起作用

然后在另一个页面上,它将显示cookie中的数字列表。

这是对我的域(HTTPS)与WWW完美的工作:https://www.mydomain.com

问题是,它不会没有WWW(https://mydomain.com)工作。似乎有两个不同的Cookie:一个用于https://mydomain.com,另一个用于https://www.mydomain.com

我也想分享的子域的网站的Cookie HTTPS

所以基本上应该是相同的cookie为:

https://www.domain.com 
https://domain.com 
http://subdomain.domain.com 

我该怎么做?

目前,我使用:

setcookie("viewed_articles", serialize($lastviewedarticles)); 

回答

6

这是正确的行为。当您设置cookie时,您需要将其设置为.domain.com,它将适用于domain.com中包含的所有域。这里

setcookie("viewed_articles", serialize($lastviewedarticles), time()+60*60*24*30, '/', '.domain.com'); 

的代码将设置cookie为30天,并为整个domain.com

+1

试过,但不起作用。也许这是因为我使用https? – anarchOi 2013-03-08 07:26:56

+0

您可以尝试'setcookie(“viewed_articles”,serialize($ lastviewedarticles),time()+ 60 * 60 * 24 * 30,'/','.domain.com',true,true);'只允许该cookie通过HTTPS设置,但我怀疑这是问题所在。您是否尝试将Cookie设置在您请求的同一个域上?此外,请尝试清除浏览器Cookie并查看是否有帮助。 – 2013-03-08 14:57:07

0

php-docs的setCookie方法。您可以在过期的值后添加域和路径。

将路径设置为/,并将域名设置为.mydomain.com,以使cookie成为您的网站的全局。

0

设置cookie中的域,也是唯一的HTTP值激活,以避免可能的XSS

setcookie("viewed_articles", serialize($lastviewedarticles), time()+3600, '/', '.yourdomain.com',0,1); 
+0

什么是http-only值? – anarchOi 2013-03-08 07:08:23