Поврежден сеанс Kohana после вставки пользовательского объекта

Описание

Я пытаюсь добавить в сеанс пользовательский объект с именем ReviewHolder. Делается это в контроллере "review". Класс ReviewHolder включен в файл classes/controller/review.php. Я использую Кохану версии 3.2.

Код

$session = Session::instance();
$reviewholder = $session->get('reviewholder');
if($reviewholder == null) {
    $session->set('reviewholder', new ReviewHolder());
}

Проблема

Проблема в том, что после того, как я выполню приведенный выше код, сеанс будет поврежден, и почти весь веб-сайт перестанет работать правильно. Это сообщение об ошибке на каждой странице:

Session_Exception [ 1 ]: Error reading session data.

Странная часть

Все страницы, которые загружаются из контроллера «обзор», по-прежнему работают правильно! Похоже, приведенный выше код портит все остальные сеансы в приложении...

Отладка

Я отладил сеанс, чтобы увидеть, правильно ли установлен объект, с помощью следующего кода:

echo Debug::vars($session->get('reviewholder'));

Это показывает объект правильно, поэтому он был установлен в сеансе.


Может ли кто-нибудь помочь мне здесь? Спасибо!


person Wouter Konecny    schedule 07.10.2012    source источник
comment
А что внутри файла сессии?   -  person zerkms    schedule 08.10.2012


Ответы (2)


На самом деле не имеет значения, что находится внутри файла сеанса.

Все, что я знаю, это то, что вы можете хранить только те объекты, которые сериализованы в сеансе.

После сериализации вы можете сохранить его в сеансе и снова сделать его объектом для последующего использования. Вы можете десериализовать сериализованный объект.

Надеюсь это поможет!

person Maik    schedule 08.10.2012
comment
Спасибо! Работал просто отлично, используя функции serialize() и deserialize(). - person Wouter Konecny; 09.10.2012

Я обнаружил, что при сохранении пользовательского объекта в сеансе у меня работает следующее:

  1. Убедитесь, что ваш каталог сеанса правильно установлен в PHP, т.е. каталог существует, разрешения позволяют вашему веб-серверу записывать в каталог

  2. Принудительно загрузите класс вашего объекта в bootstrap.php, добавив строку, например: require_once( Kohana::find_file('classes','Library/MyClass') );

После этих двух шагов я больше не видел исключение повреждения сеанса

person Chris    schedule 20.01.2014