我在两个不同的 Web 服务器上安装了自制 CMS。每个维护相同的代码。当我尝试$_SESSION
在不同域之间传递变量时,我遇到了一个非常烦人的问题。
我的 CMS 在 domain1.com 上。它控制的网站位于 domain2.com 上。我的系统通过 url 链接将登录信息的所有会话变量从 domain1.com 传递到 domain2.com(domain1.com 有这样的链接:http://domain2.com?sessionId=1gh...
)(sessionId 由 session_id() 生成)。domain2.com 检索会话 ID 并session_id($_GET['sessionId'])
设置会话并获取变量。然后它继续在顶部显示一个带有管理功能的栏。
该系统在我的一台主机以及我的本地主机上运行良好。但我最近转移到另一台主机并成功安装了我的 CMS 与相同的代码。除此功能外,一切正常。当我单击链接并尝试设置 session_id 时,session_id 会更改,但$_SESSION
变量会被删除。当我返回我的 CMS 时,我必须重新登录。不知何故,在这台主机上,更改 session_id 会删除$_SESSION
变量。
我从不喜欢会话变量,如果我要重新开始,我不会使用它们(我可能会使用纯 cookie)。但我真的需要弄清楚这一点。它工作的主机是 Bluehost,两个域都由 Bluehost 托管。它不工作的主机是[EDIT]ByteHost,域名注册商是Godaddy。
以下是来自 domain2.com 的一些示例代码:
...
if ( $_GET['sessionId'] )
{
session_id($_GET['sessionId']);
}
session_start();
echo session_id(); // returns the proper sessionId passed through the url
print_r($_SESSION); // does not work. returns array()
...
我可以保证$_SESSION
变量之前存在,因为我仍然登录到我的 CMS。
任何想法为什么会话变量在一台主机上工作,而不是在另一台主机上工作?
我尝试用工作主机替换 php.ini 文件。问题仍然存在。
感谢您的时间!
更新
我最终从我的 CMS 中删除了它。现在,我只需通过 url 传递登录详细信息,它就会将人登录。它工作得更干净。