Странное поведение 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

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