子域不能识别PHP会话

我有一个用户数据库和login表单的网站。 这个系统完美地工作了100%。 我有一个名为www.example.com的主站点和一个名为accounts.example.com的子站点。 当用户login时,他或她login主站点www.example.com/login.php

要查看他们的个人资料并进行编辑,他们点击一个链接,将他们带到accounts.example.com/profile.php?user=theirusername 。 当页面加载时,假设一个编辑button显示他们是否正在查看自己的帐户。 我会这样做, <?php if($user == $dbusername){ echo"<a href='edit.php'>EDIT</a>";} 如果我访问www.example.com/Accounts/profile.php?user=theirusername ,此function可以正常工作,但在子域上不起作用。 accounts.example.com指向www.example.com/Account/path。

我不知道为什么会发生这种情况,我正在使用标准的PHP SESSIONS。 当我查看Safari Inspector中的Cookies选项卡时,会显示1个SESSION, accounts.example.com

有没有办法将一个cookie“携带”到另一个子域? 任何帮助将是伟大的! 谢谢!

如果您需要在子域名www.example.comaccounts.example.com使用cookie,则需要将其设置在根域example.com 。 您需要将PHP设置session.cookie_domain更改为".example.com"

  1. 在php.ini你可以有session.cookie_domain = ".example.com"
  2. .htaccess变体: php_value session.cookie_domain .example.com
  3. 或者在PHP脚本里面: ini_set('session.cookie_domain', '.example.com' );

这是首选的顺序:如果你有权访问服务器configuration,你应该在涉及的VirtualHostphp.ini中执行此操作。 第三个选项是最糟糕的,因为您必须在每个PHP脚本上单独更改它。