2010-04-06 4 views
0

Я использую сеанс SaveHandler для сохранения данных сеанса в базе данных.Zend_Session: unserialize данные сеанса

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

ниже код будет работать, это не мое, но, в сущности, что она делится на строке сеанса обособленно, используя трубу в качестве разделителя , неэтериализовать разделенные куски в отдельности.

Проблема в том, что встроенная функция unserialize в 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

Смежные вопросы