我在开发和生产环境中获得了不一致的会话序列化。
代码相同,与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。
答案 0 :(得分:2)
在这方面得到了一些帮助,两台服务器之间的区别在于,一台安装了suhosin补丁并设置为加密会话数据,而另一台则没有。
我在没有它的服务器上安装了suhosin补丁,但它为我创建了一些问题,所以我在两台服务器上禁用了会话加密功能。现在一切都按预期工作了。
在设置文件中,在我的情况下 /etc/php5/conf.d/suhosin.ini
suhosin.session.encrypt = Off