这是我的表:
CREATE TABLE `Sessions` (
`id` varchar(32) NOT NULL,
`modified` int(11) default NULL,
`lifetime` int(11) default NULL,
`data` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
这是在我的引导:
$sessionConfig = array(
'name' => 'Sessions', //table name as per Zend_Db_Table
'primary' => 'id', //the sessionID given by php
'modifiedColumn' => 'modified', //time the session should expire
'dataColumn' => 'data', //serialized data
'lifetimeColumn' => 'lifetime' //end of life for a specific record
);
$saveHandler = new Zend_Session_SaveHandler_DbTable($sessionConfig);
//cookie persist for 30 days
Zend_Session::rememberMe($seconds = (60 * 60 * 24 * 30));
//make the session persist for 30 days
$saveHandler->setLifetime($seconds)
->setOverrideLifetime(true);
//similarly,
//$saveHandler->setLifetime($seconds, true);
Zend_Session::setSaveHandler($saveHandler);
Zend_Session::start();
当我登录时,从来都没有被写入到会话表,我登出的第二天浏览量。
有任何想法吗? 我试图让我的用户将永远登录。我缺少的东西在我登录控制器可能?
我好不容易才得到这个工作:
我的application.ini:
resources.db.isDefaultTableAdapter = true
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.dbname = "dbname"
resources.db.params.username = "username"
resources.db.params.password = "password"
我bootstrap.php中:
protected function _initSession() {
$resource = $this->getPluginResource('db');
$dbAdapter = $db = $resource->getDbAdapter();
Zend_Registry::set("db", $dbAdapter);
Zend_Db_Table_Abstract::setDefaultAdapter($dbAdapter);
$config = array(
'name' => 'session',
'primary' => 'id',
'modifiedColumn' => 'modified',
'dataColumn' => 'data',
'lifetimeColumn' => 'lifetime',
'db' => $dbAdapter
);
Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));
Zend_Session::start();
}
此功能被放置在了bootstrap.php中第一个功能,因为会话开始,当你构建的Zend_Session_Namespace对象首次。 如果你这样做,_initSession前() - 函数接到电话,一个标准的基于文件的会话可能会启动。
最后,session.sql:
DROP TABLE IF EXISTS `session`;
CREATE TABLE `session` (
`id` char(32) NOT NULL DEFAULT '',
`modified` int(11) DEFAULT NULL,
`lifetime` int(11) DEFAULT NULL,
`data` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我曾读到该表必须是InnoDB。
你必须告诉Zend_Session组件,通过设置一个默认的适配器Zend_Db的,或者通过你的适配器配置阵列“DB”中使用DB之前初始化你的数据库的处理程序。
也许你得把Zend_Session::start();
页面上的任何东西之前...?
与Redis的作为会话处理程序的实现有同样的问题。
对我来说,把方法_initSession
作为第一种方法在我的引导类作品。
希望这将帮助别人。
文章来源: Storing Sessions in DB Table Not Working (using Zend_Session_SaveHandler_DbTable)