我正在使用会话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中的自动加载器
答案 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);
}