问题
我的域是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中的哪一个应该显示为搜索结果?")。