【发布时间】:2011-04-14 00:31:05
【问题描述】:
我正在使用 Zend_Session_SaveHandler_DbTable 将我的会话存储在数据库中。我的 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 = "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::getInstance()->hasIdentity() 时,它最终会调用 Zend_Session::start(true) 导致错误:
致命错误:在 C:\Program Files (x86)\Zend\Apache2\htdocs\myapp\library\ 中,未捕获的异常 'Zend_Session_Exception' 带有消息“会话已由 session.auto-start 或 session_start() 启动” Zend\Session.php:462 堆栈跟踪:#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\Apache e2\htdocs\myapp\library\Zend\Session.php 在第 462 行
因为 Zend_Session_SaveHandler_DbTable 已经启动了会话。我认为 Zend_Session_SaveHandler_DbTable 会自动让 Zend_Auth 将会话信息存储在数据库中。
我这里有什么遗漏或没有正确配置吗?
【问题讨论】:
-
您自己在任何地方都给
Zend_Session::start打电话吗?或者这是由 ZF 类完成的? -
我不会在任何地方手动调用它。 Zend_Auth 在获取会话存储时调用它
-
错误消息暗示 ZF 之外的东西正在启动会话 - 您可以检查 phpinfo() 以查看您是否将 session.auto-start 设置为 on,或者您是否有任何其他 PHP 脚本可能正在使用会话的应用程序?
标签: php zend-framework