将用户重定向到www.$_SESSION问题


Redirect users to www.$_SESSION issue

问题

我的域是www.example.com。如果用户登录,然后关闭选项卡,然后打开它并转到www.example.com,则会话会继续进行,用户也会登录。

但是,如果他们键入example.com(没有www.),则显示为已注销,如果我放置print_r($_SESSION),则不会显示任何内容。但是,单击页面上的任何链接(将用户重定向到www.example.com/link)将恢复他们的会话。

因此,我意识到,当用户输入example.com时,会出现已注销,而后面没有www,这是很多用户(像我一样)经常做的事情。

问题

我能看到的两种修复方法是:

  • 找到一种方法使$_SESSION适用于任何url子域(或缺少它)
  • 将键入example.com的用户重定向到www.example.com

这两种方法都可行吗?如果可行,哪一种是最佳做法?

设置会话cookie时,它使用当前域。但您可以配置此cookie应允许使用通配符域"*.example.com"。这样,会话将在任一url上继续。请注意,通配符域cookie有点不安全,因为它们将被发送到"example.com"的任何子域,甚至是您在其他服务器上创建的子域。这可能不是一个问题,但应该提到。

但真正的解决方案应该是只使用一个指定的域。使用永久重定向代码将用户重定向到此域。这也避免了搜索引擎的重复内容问题(这不是惩罚,而是"两个URL中的哪一个应该显示为搜索结果?")。