2010-04-06 26 views
0

我使用會話SaveHandler將會話數據保留在數據庫中。Zend_Session:反序列化會話數據

樣品從數據庫session_data列:

Messenger|a:1:{s:13:"page_messages";a:0:{}}userSession|a:1:{s:7:"referer";s:32:"http://cms.dev/user/profile/view";}Zend_Auth|a:1:{s:7:"storage";O:19:"User_Model_Identity":3:{s:2:"id";s:1:"1";s:8:"username";s:13:"administrator";s:4:"slug";s:13:"administrator";}} 

我想從這個會話數據刪除Zend_Auth的對象。

如何反序列化這些對象並刪除我需要的對象?

我懷疑,我不必寫我的自定義分析器,Zend_Session已經有一個方法來做到這一點。我嘗試過unserialize的不同組合,但它仍然會返回false

我使用的是從ZF 1.10.2和學說自動加載1.2

回答

1

下面的代碼將工作,這不是我的,但在本質上它所做的是裂開使用管道作爲分隔符的會話串,分別反序列化拆分塊。

問題是,PHP中的反序列化函數的構建不理解串聯序列化。

function unserialize_session_data($serialized_string) { 
    $variables = array(); 
    $a = preg_split("/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 
    for($i=0;$i<count($a);$i=$i+2){ 
     $variables[$a[$i]] = unserialize($a[$i+1]); 
    } 
    return($variables); 
} 
+1

當代碼包含「|」時,代碼不起作用。 char: '$ ns = new Zend_Session_Namespace(); $ ns-> foo ='bar | bar';' – Koc 2013-01-13 17:07:11