2

我有 2 台服务器可用于故障转移。数据库作为 Master-Master 复制(MySQL),这样,每个服务器都运行一个完整堆栈的副本。当我在一台服务器上时,我看到会话表得到更新,并且在检查请求后,我看到发送了相同的 PHPSESSID。但是,当我更改 URL 或故障转移到辅助计算机时,我的会话被终止,我必须重新登录。

在辅助服务器上发送相同的 PHPSESSID 值,但无法识别会话。Apache/PHP 是否将会话链接到该特定框?如果是这样,我怎样才能让他们识别数据库中已经存在的会话?

4

2 回答 2

1

注意:从“编辑”移至答案以标记为已回答

确实找到了解决办法。“问题”是用于保护 PHP 安装的 Suhosin 补丁。Suhosin 支持基于加密密钥以及应用程序的 DocRoot 加密会话数据的可配置选项,因为故障转移服务器具有不同的 DocRoot,因此不可能读取加密数据。

我编辑了 suhosin.ini 以添加共享密钥,并关闭了 DocRoot 加密选项,会话按预期共享。

解决方案:http ://rommelsantor.com/clog/2011/02/06/php-shared-session-encoding-solution/

于 2011-05-02T19:52:40.340 回答
0

如果您正在使用$_SESSION,那么这与该服务器有关。您应该使用 cookie 来跟踪会话 ID,然后将其与数据库中的会话进行匹配。

于 2011-04-28T21:36:02.847 回答