繁体   English   中英

什么会阻止Zend_Session :: setSaveHandler工作

[英]What could stop Zend_Session::setSaveHandler from working

我正在一个具有多个模块的大型zf1项目。 我们需要将会话状态存储在数据库中以进行新的部署。 快速浏览完Google之后,我们遇到了Zend_Session_SaveHandler_DbTable,并在http://framework.zend.com/manual/1.12/en/zend.session.savehandler.dbtable.html上跟踪了一个简单的示例(几乎完全是这样)。 我已将代码放在我们的application / Bootstrap.php中,并检查了它的运行情况。 但是,数据库表永远不会填充会话数据。

我以为稍后会在代码库中覆盖Zend_Session :: setSaveHandler,但是我找不到对该Zend_Session :: start()的任何其他调用。

关于什么可能是错误的或如何进行进一步调查的任何建议?

使用更新的信息进行编辑:

这是引导程序相关部分的显示方式,当前仅针对开发人员模式设置。

protected function _initSessionDB()
{
  $db = Zend_Db::factory('Pdo_Mysql', array(
    'host' =>'localhost',
    'username' => '****',
    'password' => '****',
    'dbname' => '****'
  ));

  Zend_Db_Table_Abstract::setDefaultAdapter($db);
  $config = array(
      'name' => 'session_state',
      'primary' => 'id',
      'modifiedColumn' => 'modified',
      'dataColumn' => 'data',
      'lifetimeColumn' => 'lifetime'
  );

  Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));
  Zend_Session::start();
}

并且数据库有

mysql> explain session_state;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| id       | char(32) | YES  |     | NULL    |       |
| modified | int(11)  | YES  |     | NULL    |       |
| lifetime | int(11)  | YES  |     | NULL    |       |
| data     | text     | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

因此,事实证明,我正在使用的应用程序在应用程序/引导程序中设置了FlashMessenger控制器帮助程序。

protected function _initAutoload()
{
  Zend_Controller_Action_HelperBroker::addHelper(
      new Zend_Controller_Action_Helper_FlashMessenger());
}

FlashMessenger操作帮助程序自行调用Zend_Session::start(); 这似乎优先于以后的通话。

简单的解决方案是添加$this->bootstrap('sessionDB'); 在创建FlashMessenger之前调用。 例如,

protected function initFlashMessenger()
{
  $this->bootstrap('sessionDB');

  if (APPLICATION_ENV != 'testing')
    Zend_Controller_Action_HelperBroker::addHelper(
      new Zend_Controller_Action_Helper_FlashMessenger());
}

更好的解决方案是根本不在引导程序中创建FlashMessenger,而仅在控制器或适当的基本控制器中创建它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM