Zend_Session: десериализация данных сеанса - PullRequest
0 голосов
/ 06 апреля 2010

Я использую сеанс 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 Ответ

1 голос
/ 17 августа 2010

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

Проблема в том, чтовстроенная функция 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...