Странное поведение Zend_Session с использованием Zend_Application
Я пишу, чтобы узнать, сталкивался ли кто-то из вас с этой проблемой раньше, и у вас есть шанс понять, почему это случилось со мной.
Это история.
Я разработал много приложений ZF до Zend Framework v. 1.8, затем я остановился на 18 месяцев. Теперь мне нужно было начать новый проект, в котором я решил снова использовать Zend Framework.
На моем локальном сервере была установлена версия 1.11.3, поэтому я не загружал последнюю версию.
Перед использованием Zend_Application с файлом Bootstrap.php я использовал для запуска сессий, помещая свои параметры сессии в мой файл config.ini, а затем загружая их в экземпляр Zend_Session, например так:
config.ini
sessions.name = NAME
sessions.use_only_cookies = 1
sessions.save_path = APPLICATION_PATH "/../tmp/sessions"
sessions.strict = on
sessions.remember_me_seconds = 1800
index.php (в общедоступный каталог веб-сервера) перед запуском приложения:
Globals::startSession();
Пользовательский класс Globals с различными полезными методами:
class Globals
{
static public function startSession()
{
$sessions_conf = self::getConfig()->sessions;
Zend_Session::setOptions($sessions_conf->toArray(););
Zend_Session::start();
}
}
Это всегда работало очень хорошо, включая мои сеансы (используемые с Zend_Session_Namespace) и сохраняя файлы сеансов в save_path.
При использовании Zend_Application руководство предлагает просто сохранить параметры сеанса в файле application.ini под ресурсами раздела, а Zend_Session будет настроен автоматически...
Я сделал это так:
; SESSIONS
resources.session.name = NAME
resources.session.use_only_cookies = 1
resources.session.save_path = APPLICATION_PATH "/../tmp/sessions"
resources.session.strict = on
resources.session.remember_me_seconds = 1800
Это не сработало. Поэтому я попытался использовать (не одновременно!) Методы _initSession() и _initForceSession() в файле Bootstrap.php, поместив их в начале класса и записав в них код:
$this->bootstrap('session');
Но сессия никогда не работала, данные не сохранялись между http-запросами, а файлы сессий никогда не записывались в save_path...
Может ли кто-нибудь, пожалуйста, дать мне знать, если это нормальное поведение (может быть, я что-то упустил где-то...)?
Очевидно, что я решил проблему, повторно внедрив мой старый метод (и он отлично работает), но я хотел бы научиться правильно его использовать.
Заранее спасибо.
2 ответа
Это должен быть случай, чтобы включить его, и он работает, возможно, сделал это легко.
Я думаю, что у вас могут быть проблемы с настройкой параметров в вашем application.ini:
; SESSIONS
resources.session.name = NAME
resources.session.name.use_only_cookies = 1
resources.session.name.save_path = APPLICATION_PATH "/../tmp/sessions"
resources.session.name.strict = on
resources.session.name.remember_me_seconds = 1800
согласно справочному руководству
Чтобы установить параметр конфигурации сеанса, включите базовое имя (часть имени после "сеанса") в качестве ключа массива, передаваемого в Zend_Session::setOptions().
с вашими параметрами, установленными правильно, загрузчик _initSession() должен просто работать.
public function _initSession()
{
Zend_Session::start();
}
PS Я использую Zend_Session_Namespace все время, но редко имею дело с глобальной сессией.
В вашем Bootstrap.php добавить
public function _initSession()
{
Zend_Session::start();
}
параметры сеанса могут быть установлены в application.ini