Настройка Zend_Session через Zend_Application

Поэтому я создал шаблон сайта с помощью Zend_Tool и добавил эти параметры в application.ini.

resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
resources.session.saveHandler.options.name = "session"
resources.session.saveHandler.options.primary.session_id = "session_id"
resources.session.saveHandler.options.primary.save_path = "save_path"
resources.session.saveHandler.options.primary.name = "name"
resources.session.saveHandler.options.primaryAssignment.sessionId = "sessionId"
resources.session.saveHandler.options.primaryAssignment.sessionSavePath = "sessionSavePath"
resources.session.saveHandler.options.primaryAssignment.sessionName = "sessionName"
resources.session.saveHandler.options.modifiedColumn = "modified"
resources.session.saveHandler.options.dataColumn = "session_data"
resources.session.saveHandler.options.lifetimeColumn = "lifetime"

Проблема, похоже, не в ресурсе сеанса или вызываемом saveHandler, но вместо этого кажется, что PHP / Zend даже не пытается настроить мой сеанс в базе данных.

Я не получаю ошибок, если я не удалю параметр, который требуется для ресурса сеанса, и не разместил проверки в разных классах Zend, чтобы увидеть, запускаются ли они; которые они есть.

Сейчас я предполагаю, что мне нужно что-то изменить в php.ini, чтобы Zend_Session мог переопределить обработку сеанса по умолчанию. Я использую Zend Server для этого теста.

Ответы

Я проверил session.auto_start, и он был установлен на 0.

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

Из того, что я могу судить по моей настройке, вызывается конструкция Zend_Session_SaveHandler_DbTable :: __, и мои настройки resources.db находятся выше моего сеанса и работают для всего остального.

Помимо всего этого, в настоящее время у меня неправильно настроены данные saveHandlers.options, и я видел другие сообщения в StackOverflow, которые относятся к ошибкам из-за плохих конфигураций saveHandler.

Как я сказал выше, я думаю, что это как-то связано с тем, что PHP не вызывает переданные функции для обработки сеанса. Я знаю, что если вы хотите настроить собственное управление сеансом, вы можете подключиться к этим вызовам и предоставить функции обратного вызова, которые будут выполняться в каждом состоянии (открытие, закрытие, чтение, запись и т. Д.).

Я просто недостаточно знаю о настройках PHP.ini, чтобы знать, есть ли определенные настройки, которые нужно включить, чтобы разрешить изменение управления сеансом.


person Ballsacian1    schedule 02.03.2010    source источник


Ответы (2)


Попробуйте это в своем бутстрапе:

protected function _initForceSession()
{
    $this
            ->bootstrap('db')
            ->bootstrap('session');
}

Вы также можете попробовать применить мой патч к Zend_Session, чтобы увидеть, что сеанс уже запущен, и вы не можете изменить savehandler: http://framework.zend.com/issues/browse/ZF-7915. Я не помню всех подробностей, но есть какая-то несовместимость в этих компонентах ...

person Vladimir Mihailenco    schedule 02.03.2010
comment
Да, по какой-то причине, хотя db создавался до session_handler, и изменение их порядка привело к исключению db, не включая __initForceSession в загрузчике, ваш измененный файл Session.php пометил сеанс как уже установленный. Я удивлен, что еще не было проверки, была ли создана сессия. - person Ballsacian1; 02.03.2010

При использовании обработчика БД для сеансов вы должны убедитесь, что БД инициализирована до ресурса сеанса. Соединение с базой данных будет установлено для обработчика как адаптер во время начальной загрузки. Если это не решит проблему, попробуйте настроить обработчик сеанса вручную, а также убедитесь, что session.auto_start отключен в PHP.ini

person Gordon    schedule 02.03.2010
comment
см. ответ выше. Синопсис ... Я думаю, что это связано с хуками обратного вызова, которые php позволяет вам подключать для управления сеансом, и тем, как по какой-то причине (возможно, из-за настройки) они не используются. IE (открыть, закрыть, прочитать, написать). - person Ballsacian1; 02.03.2010
comment
@ Ballsacian1 понятия не имею, извините. Вы можете попробовать выполнить процесс начальной загрузки с помощью Zend_Debugger или XDebug, чтобы увидеть, где что-то идет не так. - person Gordon; 02.03.2010