跨服务器的会话序列化不一致

时间:2011-10-18 11:32:43

标签: php session

我在开发和生产环境中获得了不一致的会话序列化。

代码相同,与SVN同步。 Apache和PHP配置基本相同,只是域名不同。两者都运行Debian Squeeze,服务器是64位,开发是32位。

在服务器上,保存的数据看起来像base64编码,但我不确定是:

vvZKW5WEbvvRCs0-M0R8zTDAuTsKZSADKORDemOWOXqPJs0J42l7nZIewsHp8JjGFQw64Xq2x5dB_7187W4HPdJ1Yo5yK6oHvB8ofx7GL82WJCaPrzP8pR1xm02f9HenDaShvy1WTHuMuCSJ3zWGUnjRpOuJtZ49v4Dh2L5U0M4.

开发会话数据是正常的PHP样式:

foo|s:3:"bar";baz|s:6:"wombat";promoter|O:8:"stdClass":0:{}475b17e28b25580bb92430bb286637ddlanguage|s:5:"en_us";

在服务器上,会话管理无法正常工作,例如,转到站点上的子域会导致会话重新初始化所有子域。

我正在使用Yii框架,虽然我已经在框架完成任何处理之前通过复制粘贴我的index.php文件中的code found here来消除它作为问题的根源。

所以我的问题是:为什么会发生这种情况,如何让服务器像开发环境一样保存会话数据?

顺便说一句,我宁愿不必诉诸一些讨厌的黑客,如:

function writeSession($id,$data)
{
     $data = serialize($_SESSION);
     ....
}

TIA。

1 个答案:

答案 0 :(得分:2)

在这方面得到了一些帮助,两台服务器之间的区别在于,一台安装了suhosin补丁并设置为加密会话数据,而另一台则没有。

我在没有它的服务器上安装了suhosin补丁,但它为我创建了一些问题,所以我在两台服务器上禁用了会话加密功能。现在一切都按预期工作了。

在设置文件中,在我的情况下 /etc/php5/conf.d/suhosin.ini

suhosin.session.encrypt = Off