2010-09-18 2 views
1

Я использую Zend_Session_SaveHandler_DbTable для хранения моих сеансов в базе данных. У меня есть следующее в моем приложении.iniНевозможно использовать Zend_Auth и Zend_Session_SaveHandler_DbTable в Zend_Application

resources.session.save_path = APPLICATION_PATH "/../data/sessions" 
resources.session.use_only_cookies = true 
resources.session.remember_me_seconds = 864000 
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.session_id = "sessionId" 
resources.session.saveHandler.options.primaryAssignment.save_path = "sessionSavePath" 
resources.session.saveHandler.options.primaryAssignment.name = "sessionName" 
resources.session.saveHandler.options.modifiedColumn = "modified" 
resources.session.saveHandler.options.dataColumn = "session_data" 
resources.session.saveHandler.options.lifetimeColumn = "lifetime" 
resources.session.saveHandler.options.userIdColumn = "user_id" 

Сессии, кажется, правильно сохраняются в базе данных.

Проблема заключается в том, что, когда я называю Zend_Auth :: деЫпзЬапсе() -> hasIdentity() в приложении, он будет в конечном итоге назвать Zend_Session :: заводится (правда), что приведет к ошибке:

Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()' in C:\Program Files (x86)\Zend\Apache2\htdocs\myapp\library\Zend\Session.php:462 Stack trace: #0 C:\Program Files (x86)\Zend\Apache2\htdocs\myapp\library\Zend\Session\Namespace.php(143): Zend_Session::start(true) #1 C:\Program Files (x86)\Zend\Apache2\htdocs\myapp\library\Zend\Auth\Storage\Session.php(87): Zend_Session_Namespace->__construct('Zend_Auth') #2 C:\Program Files (x86)\Zend\Apache2\htdocs\myapp\library\Zend\Auth.php(91): Zend_Auth_Storage_Session->__construct() #3 C:\Program Files (x86)\Zend\Apache2\htdocs\myapp\library\Zend\Auth.php(141): Zend_Auth->getStorage() #4 C:\Program Files (x86)\Zend\Apache2\htdocs\myapp\application\modules\default\views\scripts\layout.phtml(29): Zend_Auth->hasIdentity() #5 C:\Program Files (x86)\Zend\Apache2\htdocs\myapp\library\Zend\View.php(108): include('C:\Prog in C:\Program Files (x86)\Zend\Apache2\htdocs\myapp\library\Zend\Session.php on line 462

поскольку Zend_Session_SaveHandler_DbTable уже начал сеанс. Я, однако, что Zend_Session_SaveHandler_DbTable будет автоматически иметь Zend_Auth хранить информацию о сеансе в базе данных.

Есть что-то, что мне не хватает здесь или не настроили правильно?

+0

Do вы называете 'Zend_Session :: start' себя где угодно? Или это делается классом ZF? –

+0

Я не называю это вручную нигде. Он получает вызванный Zend_Auth, когда он получает хранилище сеансов. – Christopher

+0

Сообщение об ошибке означает, что за пределами ZF запускается что-то вне ZF. Можете ли вы проверить phpinfo(), чтобы увидеть, есть ли у вас session.auto-start, включен или нет? любые другие PHP-скрипты в приложении, которые могут использовать сеансы? –

ответ

0

документация (http://framework.zend.com/manual/en/zend.application.available-resources.html#zend.application.available-resources.session) неверен для настройки сохранения обработчика в Application.ini

должно быть:

resources.session.save_path = APPLICATION_PATH "/../data/sessions" resources.session.use_only_cookies = true resources.session.remember_me_seconds = 864000 resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable" resources.session.saveHandler.options.name = "session" resources.session.saveHandler.options.primary[] = "session_id" resources.session.saveHandler.options.primary[] = "save_path" resources.session.saveHandler.options.primary[] = "name" resources.session.saveHandler.options.primaryAssignment[] = "sessionId" resources.session.saveHandler.options.primaryAssignment[] = "sessionSavePath" resources.session.saveHandler.options.primaryAssignment[] = "sessionName" resources.session.saveHandler.options.modifiedColumn = "modified" resources.session.saveHandler.options.dataColumn = "session_data" resources.session.saveHandler.options.lifetimeColumn = "lifetime"

Я представил вопрос ZF: http://framework.zend.com/issues/browse/ZF-10471

Смежные вопросы