Zend_Session теряет данные... но почему?

Я очень новичок в этой вещи Zend_Session. У меня работает приложение Zend Framework; теперь я хочу добавить некоторые "особенности" к нему. Для одной из этих функций требуются некоторые данные, содержащиеся в сеансе, поэтому он сохраняется на всех сайтах, которые посетит пользователь.

В моем Bootstrap у меня есть

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initSession() {
        Zend_Session::setOptions(array(
          'use_only_cookies' => 'on',
          'remember_me_seconds' => 864000
        ));
        Zend_Session::start();
    }
}

В моей модели есть функция, которая сохраняет данные в $_SESSION для данного ключевого слова:

 $_SESSION['foo'][urlencode($keyword)] = array(   
              'data' => $base->some->foo[0]->fish->data         
            );

Новые данные устанавливаются в сеанс, только если не установлен ключ сеанса (с ключевым словом). Я проверил это с помощью Zend Debugger, все работает хорошо.

Теперь, когда я сначала захожу на страницу, все работает хорошо. Когда я перезагружаю страницу (или перехожу на другую), значения в сеансе исчезают. Итак, если быть точным, ключи есть, массив $_SESSION имеет (например) 20 записей размера. Запись есть, но она пуста.

$_SESSION['foo']['my+foo']['data'] = null

Когда я звоню:

Zend_Debug::dump($_SESSION['foo']['my+foo']);

Я получил:

array (size=1)
  'data' => null

Таким образом, это там, и это убило мою ценность.

Каково волшебство вуду, чтобы заставить его работать, когда я использую простой session_start()?

2 ответа

Нажмите Ctrl + F и замените все на Zend_Session_Namespace объект вместо суперглобального $_SESSION:

$session = new Zend_Session_Namespace('foo');
$session->someData = array(   
    'data' => array('blah') 
);

Если ошибка повторяется, расширяет Zend_Session_Namespace и положить echo (для отладки) всякий раз, когда вы меняете данные сеанса, вы сможете узнать, заменяется ли они другим фрагментом кода без вашего подтверждения.

Или лучше использовать интерактивный отладчик и проверять класс строка за строкой (например, xDebugger). Это никогда не подведет ;)

drew010 сделал это, я должен сохранить каждое значение в его представлении в моей сессии, так

$_SESSION['foo']['bar'] = array(
 'data' => (int) $base->some->foo[0]->fish->data,
  'moredata' => (string)$base->some->foo[0]->fish->moredata
);

и так далее. Спасибо!

Другие вопросы по тегам