PHP复制数据库会话故障转移

时间:2011-04-28 21:28:39

标签: php mysql session failover high-availability

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

如果您正在使用$_SESSION,那么它将被绑定到该服务器。您应该使用cookie来跟踪会话ID,然后将其与数据库中的会话进行备份。