如果我在www.example.com上创建一个cookie,然后在example.com上检查它,为什么该cookie在那里不存在? 我计划使用.htaccess
将非www重定向到www域。但是我该如何解决这个问题呢?
www
是一个特殊情况; 从它们的角度来看,www.mydomain.com
和mydomain.com
是不同的字符串,因此具有不同的安全策略。但是,您可以做一些事情。.mydomain.com
(带前导点)。这将告诉用户的浏览器将cookie提供给mydomain.com
和所有子域,包括www
。 PHP的setcookie函数有一个$domain
参数,但它是列表中的第五个,因此您可能需要将$expire
和$path
设置为默认值才能访问它。setcookie('name', 'value', time()+3600, '/', '.mydomain.com');
为了保持一致性,您可能希望考虑将所有网络流量重定向到特定域名,即将mydomain.com
的流量发送到www.mydomain.com
,或反之亦然。我对SEO(如果不正确请编辑)的模糊了解告诉我,这有助于避免重复内容,并且可以避免所有此类身份验证问题。此外,如果您在子域上存储资产,则在其中保存Cookie会通过每次传输Cookie来减慢流量速度,因此仅在www
上存储应用程序Cookie可以获得速度提升。
setcookie("CookieName", "value", time()+3600, "/", ".mydomain.com");
我相信你可以在 example.com(实际上是 .example.com)设置 cookie,如果他们访问 www.example.com,则会发送该 cookie,但反之则不行。这种标准安全策略旨在防止用户的私人数据被发送到意外的服务器。
个人而言,我在我的 apache2.conf 中使用虚拟主机:
<VirtualHost *:80>
ServerName example.com
RedirectMatch (.*) http://www.example.com$1
</VirtualHost>
因为 PHP 会将 www.mydomain.com 和 mydomain.com 翻译成不同的内容。如果域名不完全相同,cookie 就无法匹配。
我相信浏览器在允许服务器覆盖 cookie 之前也会寻找域名的完全匹配。
只需使用 .htaccess 进行重定向。这是在所有浏览器中解决此问题的唯一可靠方法。