2010-03-02 1 views
1

Так я построил шаблон сайта с помощью Zend_Tool и добавил эти параметры в Application.iniНастройка Zend_Session Через Zend_Application

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, чтобы узнать, есть ли определенные параметры, которые необходимо включить, чтобы разрешить изменение управления сеансом.

ответ

2

Попробуйте это в вашем файле загрузки:

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

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

+0

Да, по какой-то причине, даже если db создавался до того, как session_handler и изменил порядок, получилось исключение db, не считая __initForceSession в бутстрапе, вызвало изменение файла Session.php для флага, который уже был установлен. Я удивлен, что не было проверки, чтобы проверить, был ли сеанс создан. – Ballsacian1

2

При использовании обработчика БД для сеансов вы должны make sure the DB is initialized before the Session Resource. Соединение db будет установлено на обработчик в качестве адаптера во время загрузки. Если это не решит проблему, попробуйте настройки Session handler manually а также make sure session.auto_start is disabled in PHP.ini

+0

см. Выше для ответа. Синопсис .. Я думаю, что это связано с крючками обратного вызова, которые php позволяет вам подключить к управлению сеансом и как по какой-либо причине (возможно, настройке) они не используются. IE (открыть запись с закрытым чтением). – Ballsacian1

+0

@ Ballsacian1 нет ключ, извините. Вы можете попытаться выполнить процесс начальной загрузки с помощью Zend_Debugger или XDebug, чтобы узнать, где это происходит. – Gordon