PHP cookie问题 - www或没有www

时间:2010-02-26 22:00:21

标签: php .htaccess cookies

为什么我在www.example.com上创建一个cookie并在example.com上查看,那里的cookie不存在?我打算只使用.htaccess将非www重定向到www域。但是我该如何解决这个问题?

4 个答案:

答案 0 :(得分:32)

浏览器是这里的罪魁祸首,而不是PHP。它们按域存储,不知道www是特例;从他们的角度来看,www.mydomain.commydomain.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进行重定向即可。这是在所有浏览器中解决此问题的唯一可行方法。