子域上的会话仍然无效

时间:2011-03-15 16:35:10

标签: php session

几个小时前,我在这里创建了一个关于会话的线程,这个会话在切换到www时不再存在。这应该已经解决了这个问题:

session_set_cookie_params(0, '/', '.'.$_SERVER['HTTP_HOST']);

根据php.net和其他网站上的几个例子,这应该是正确的。什么时候去网站而不使用www。然后切换到www。会话仍然有效(我仍然记录它),但由于一些非常奇怪的原因,使用www时无法在网站上创建会话(以便登录)。现在

所以我可以在不使用www时登录,我可以切换到www。因此会话仍然存在,但使用www时无法登录。

任何人都可以解释一下这种行为以及我如何解决这个问题?另外,使用该服务器是否安全?

谢谢!

2 个答案:

答案 0 :(得分:5)

如果您从 www.example.com 请求某些资源,则Cookie将设置为.www.example.com,因此它仅适用于 www.example.com < / em>及其所有子域名,但不是 example.com

在添加www.之前,只需删除前导.,例如:

$domain = '.' . preg_replace('/^www\./', '', strtolower($_SERVER['HTTP_HOST']));

答案 1 :(得分:1)

$_SERVER['HTTP_HOST']可能是www.example.com,而不是example.com。如果您想对其进行测试,则可以通过将$_SERVER ...替换为实际的'.example.com'来进行硬编码。