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
);
и так далее. Спасибо!