【问题标题】:Unable to use Zend_Auth and Zend_Session_SaveHandler_DbTable in a Zend_Application无法在 Zend_Application 中使用 Zend_Auth 和 Zend_Session_SaveHandler_DbTable
【发布时间】: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


【解决方案1】:

文档(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 = 真的 resources.session.remember_me_seconds = 864000 资源.session.saveHandler.class= “Zend_Session_SaveHandler_DbTable” resources.session.saveHandler.options.name =“会话”资源.session.saveHandler.options.primary[] = "session_id" 资源.session.saveHandler.options.primary[] =“save_path”资源.session.saveHandler.options.primary[] =“名称”资源.session.saveHandler.options.primaryAssignment[] = "sessionId" 资源.session.saveHandler.options.primaryAssignment[] = "sessionSavePath" 资源.session.saveHandler.options.primaryAssignment[] = "sessionName" 资源.session.saveHandler.options.modifiedColumn =“修改”resources.session.saveHandler.options.dataColumn = "session_data" 资源.session.saveHandler.options.lifetimeColumn =“终生”

我已提交 ZF 问题:http://framework.zend.com/issues/browse/ZF-10471

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    相关资源
    最近更新 更多