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

Может ли кто-нибудь сообщить мне, является ли это нормальным поведением (может, я что-то где-то пропустил ...)?

Очевидно, я решил проблему, повторно реализовав свой старый метод (и он отлично работает), но я хотел бы узнать, как его правильно использовать.

Заранее спасибо.


person Alessandro    schedule 22.05.2012    source источник
comment
не могли бы вы опубликовать код для ваших _initSession () и _initForceSession () (если они отличаются)?   -  person Tim Fountain    schedule 23.05.2012
comment
Нет, код тот же, есть только вызов Zend_Session :: start ();   -  person Alessandro    schedule 29.05.2012


Ответы (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

согласно справочному руководству

Чтобы установить параметр конфигурации сеанса, включите базовое имя (часть имени после «session.») В качестве ключа массива, передаваемого в Zend_Session :: setOptions ().

если ваши параметры установлены правильно, bootstrap _initSession () должен просто работать.

public function _initSession()
{
Zend_Session::start();
}

P.S. Я постоянно использую Zend_Session_Namespace, но редко имею дело с глобальным сеансом.

person RockyFord    schedule 23.05.2012
comment
Спасибо за подсказки, завтра попробую и дам знать, смогу ли я заставить его работать правильно. - person Alessandro; 27.05.2012
comment
Делать нечего, я пробовал использовать базовое имя после сеанса. в моем application.ini и установите функцию _initSession () в моем Bootstrap.php, но, как и раньше, в save_path не хранится файл сеанса ... Я действительно не могу понять почему. - person Alessandro; 29.05.2012
comment
Я провел тест, используя var_dump (Zend_Session :: getOptions ()); в моем _initSession () в файле Bootstrap.php, и кажется, что ни один из моих параметров ini не был установлен ... - person Alessandro; 29.05.2012
comment
Я попытался вставить в функцию начальной загрузки __initSession () следующее: - person Alessandro; 29.05.2012
comment
code публичная функция _initSession () {// $ this- ›bootstrap ('session'); // Globals :: startSession (); $ options = Globals :: getConfig () - ›ресурсы-› сеанс; Zend_Session :: setOptions ($ options- ›toArray ()); // var_dump (Zend_Session :: getOptions ()); //выход(); Zend_Session :: start (); } code параметры назначаются Zend_Session, но без результата ... всегда нет файлов в save_path. Полагаю, это действительно странно ... - person Alessandro; 29.05.2012

В вашем Bootstrap.php добавьте

public function _initSession()
{
Zend_Session::start();
}

параметры сеанса можно установить в application.ini

person Mr Coder    schedule 22.05.2012
comment
Я действительно использовал _initSession (), как вы мне предложили, но без результатов, я думаю, что чего-то не хватает, возможно, пользователь RockyFord прав со своими предложениями, завтра я постараюсь их реализовать. - person Alessandro; 27.05.2012
comment
Это решение дает мне тот же результат, что и у RockyFord, файлы сеанса не хранятся в указанном save_path ... - person Alessandro; 29.05.2012