2011-10-18 45 views
2

我的開發和生產環境中會話序列化不一致。跨服務器的會話序列化不一致

代碼是完全相同的,與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,然後在框架完成任何處理之前消除了作爲問題的來源。

所以我的問題是:爲什麼會發生這種情況,以及如何讓服務器像開發環境一樣保存會話數據?

BTW,我寧願不不得不求助於一些討厭的黑客一樣:

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

TIA。

+0

爲什麼不使用自定義會話處理程序?現成的許多書面材料都可以使用。事實上,因爲我沒有意識到序列化格式有任何改變,所以它看起來像你的服務器已經在使用客戶處理程序 - 所以覆蓋它或刪除它。 – symcbean

+0

我正在使用Yii的自定義會話處理,我鏈接的代碼是測試序列化,而沒有框架阻礙。 –

回答

2

得到了一些幫助,這兩個服務器之間的區別是,一個人已安裝suhosin補丁並設置爲加密會話數據,而另一個沒有。

我在沒有它的服務器上安裝了suhosin補丁,但它爲我創建了一些問題,所以我禁用了兩臺服務器上的會話加密功能。現在一切都按預期工作。

在設置文件中,在我的情況/etc/php5/conf.d/suhosin.ini

suhosin.session.encrypt = Off