PHP cookie问题-www或不使用www

PHP cookie问题-www或不使用www,php,.htaccess,cookies,Php,.htaccess,Cookies,为什么如果我在www.example.com上创建一个cookie并在example.com上检查它,cookie就不存在了?我计划只使用.htaccess将非www重定向到www域。但是我该如何解决这个问题呢?因为php对www.mydomain.com和mydomain.com的翻译不同。如果域不是100%相同,cookie将不匹配 我敢肯定,在允许服务器覆盖域名之前,浏览器也会查找域名的100%匹配 只需使用.htaccess重定向即可。这是在所有浏览器中解决这个问题的唯一可靠方法。浏览器

为什么如果我在www.example.com上创建一个cookie并在example.com上检查它,cookie就不存在了?我计划只使用
.htaccess
将非www重定向到www域。但是我该如何解决这个问题呢?

因为php对www.mydomain.com和mydomain.com的翻译不同。如果域不是100%相同,cookie将不匹配

我敢肯定,在允许服务器覆盖域名之前,浏览器也会查找域名的100%匹配


只需使用.htaccess重定向即可。这是在所有浏览器中解决这个问题的唯一可靠方法。

浏览器是罪魁祸首,而不是PHP。他们按域存储,不知道
www
是特例;从他们的角度来看,
www.mydomain.com
mydomain.com
是不同的字符串,因此具有不同的安全策略。然而,你可以做一些事情

设置cookie时,请使用
.mydomain.com
(带前导点)。这将告诉用户的浏览器使cookie可访问
mydomain.com
和所有子域,包括
www
。PHP的参数是
$domain
,但它是列表中的第五个参数,因此您可能需要将
$expire
$path
设置为它们的默认值才能获得它

setcookie('name', 'value', time()+3600, '/', '.mydomain.com');

对于一致性,您可能希望考虑将所有Web流量重新路由到特定的域,即发送<代码> MyDeal.com >代码>流量到<代码> www. MyNeal.com >代码>,反之亦然。我对搜索引擎优化的模糊认识(如果不正确,请编辑)告诉我,这样做很有帮助,不会有重复的内容,而且它可以为您避免所有此类认证问题。此外,如果您将资产存储在子域上,则在子域上存储cookie会降低流量,因为每次都必须传输cookie,因此仅在

www
上存储应用程序cookie可以提高速度


我相信您可以在example.com(really.example.com)设置cookie,如果他们访问www.example.com,cookie将被发送,但反之亦然。此标准安全策略用于防止将用户的私有数据发送到意外的服务器

就我个人而言,我在apache2.conf中使用虚拟主机:

<VirtualHost *:80>
    ServerName example.com
    RedirectMatch (.*) http://www.example.com$1
</VirtualHost>

ServerName example.com
重定向匹配(*)http://www.example.com$1

。。。在本例中,每个试图加载的人(例如)都会被重定向到。

您已接近SEO内容。不管你选择使用或不使用www;只要你选择一个并坚持下去。www.*不是特例。这是一个约定,但在http/cookie RFC中没有编纂的含义。浏览器神奇地给予www特殊待遇是非常荒谬的。不管怎样,+1。是的,不是。但在你充分了解之前,互联网的许多内部运作看起来就像魔术一样,所以我愿意在解释的时候慢慢来;)这是一篇旧文章,但感谢您确认浏览器存在的问题!在我的例子中,我正在使用javascript调用创建/更新cookie,在这种情况下,无法强制浏览器忽略“www”而不是非www。因此,现在,如果访问者以这种方式到达,我会将页面重定向到非www。至于@FrankFarmer,我可以确认,截至2019年,浏览器仍将为这两种情况创建不同的cookie。我同意这看起来很荒谬,但正如我们在神秘的“www”世界中所了解到的那样,有效的东西比艾姆斯的感觉更重要,即使我们希望有一天能了解它的原因。:-)在域前面加上句号可以解决这个问题。不需要精确匹配。“因为php翻译”。。。它与php无关,与浏览器有关。浏览器不会将所有cookie发送到网站。他们只选择具有匹配域名的域名。您必须显式设置cookie域。或者使用类似的方法自动处理“www”与“non-www”的情况。
setcookie("CookieName", "value", time()+3600, "/", ".mydomain.com");