1

Я пишу, чтобы узнать, столкнулся ли кто-то из вас с этой проблемой раньше, и у меня есть шанс понять, почему это случилось со мной.Странное поведение Zend_Session с использованием Zend_Application

Это история.

Я разработал множество приложений ZF до Zend Framework версии 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 ...

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

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

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

+0

Вы могли бы разместить код для своих _initSession() и _initForceSession() (если они отличаются)? –

+0

Нет, код тот же, есть только вызов Zend_Session :: start(); – Alessandro

ответ

0

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

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

параметры сеанса могут быть установлены в Application.ini

+0

Я использовал _initSession(), как вы мне предложили, но без результатов, я думаю, что чего-то не хватает, может быть, пользователь RockyFord прав со своими предложениями, я попробую завтра их реализовать. – Alessandro

+0

Это решение дает мне тот же результат, что и у RockyFord, никакие файлы сеансов не хранятся в указанном файле save_path ... – Alessandro

1

Это должно быть случай, включите его и он работает, возможно, сделал это легко.

Возможно, у вас может возникнуть проблема с настройкой параметров в приложении.ини:

; 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 

по reference manual

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

с вашими параметрами правильно загрузочный бутстрап _initSession() должен просто работать.

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

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

+0

Спасибо за ваши подсказки, я получу попытку завтра и дам вам знать, смогу ли я это сделать правильно. – Alessandro

+0

Нечего делать, я попытался использовать базовое имя после сеанса. в моем приложении application.ini и установить функцию _initSession() в моем Bootstrap.php, но, как и прежде, файл сохранения не сохраняется в save_path ... Я действительно не могу понять, почему. – Alessandro

+0

Теперь я выполнил тест с использованием var_dump (Zend_Session :: getOptions()); в моем _initSession() в файле Bootstrap.php и кажется, что ни одна из моих опций ini не была установлена ​​... – Alessandro