为什么我在www.example.com上创建一个cookie并在example.com上查看,那里的cookie不存在?我打算只使用.htaccess
将非www重定向到www域。但是我该如何解决这个问题?
答案 0 :(得分:32)
浏览器是这里的罪魁祸首,而不是PHP。它们按域存储,不知道www
是特例;从他们的角度来看,www.mydomain.com
和mydomain.com
是不同的字符串,因此具有不同的安全策略。但是,你可以做些什么。
设置Cookie时,请使用.mydomain.com
(带前导点)。这将告诉用户的浏览器使mydomain.com
和所有子域(包括www
)都可以访问Cookie。 PHP setcookie的参数为$domain
,但它在列表中排名第五,因此您可能需要将$expire
和$path
设置为默认值才能获得它。
setcookie('name', 'value', time()+3600, '/', '.mydomain.com');
但是,为了保持一致性,您可能希望考虑将所有网络流量重新路由到特定域,即将mydomain.com
流量发送到www.mydomain.com
,反之亦然。我对SEO的模糊知识(如果不正确则编辑)告诉我,这样做是有帮助的,以便不会有重复的内容,它可以为您节省所有这些身份验证问题。此外,如果您将资源存储在子域中,那么在那里使用cookie会因每次必须传输而减慢流量,因此仅在www
上存储应用程序cookie会为您带来速度提升。
Here is a tutorial on how to accomplish such a redirect in Apache.
答案 1 :(得分:1)
setcookie("CookieName", "value", time()+3600, "/", ".mydomain.com");
答案 2 :(得分:0)
我相信你可以在example.com(真的.example.com)上设置cookie,如果他们去www.example.com就会发送,但反之亦然。此标准安全策略旨在防止用户的私人数据被发送到非预期的服务器。
就个人而言,我在apache2.conf中使用虚拟主机:
<VirtualHost *:80>
ServerName example.com
RedirectMatch (.*) http://www.example.com$1
</VirtualHost>
...在这个例子中,每个人都试图加载,例如http://example.com/index.html被重定向到http://www.example.com/index.html。
答案 3 :(得分:-2)
因为php翻译www.mydomain.com与mydomain.com不同。如果域名不是100%相同,则cookie不匹配。
我确信浏览器还会在允许服务器覆盖域名之前查找域名的100%匹配。
只需使用.htaccess进行重定向即可。这是在所有浏览器中解决此问题的唯一可行方法。