[英]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.