2010-04-06 24 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