Zend_Session:反序列化会话数据

时间:2010-04-06 13:30:00

标签: zend-framework session

我正在使用会话SaveHandler在数据库中保存会话数据。

数据库中的示例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和Doctrine 1.2中的自动加载器

1 个答案:

答案 0 :(得分:1)

下面的代码可以工作,它不是我的,但实质上它的作用是将会话字符串分开,使用管道作为分隔符,单独反序列化拆分块。

问题是php中的unserialize函数的构建不理解连接的序列化。

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);
}
相关问题