这是我的表:
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();
当我登录时,没有任何内容被写入Sessions表,我将在下一页浏览中注销。
有什么想法吗?我正在尝试让我的用户永久登录。我可能在登录控制器中遗漏了什么吗?
答案 0 :(得分:2)
我只是设法让这个工作:
我的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。
答案 1 :(得分:1)
在告诉Zend_Session使用数据库之前,必须初始化数据库处理程序,方法是为Zend_Db设置默认适配器,或者将配置数组中的适配器作为“db”传递。
答案 2 :(得分:0)
也许您必须先将Zend_Session::start();
放在页面上的任何其他内容上??
答案 3 :(得分:0)
将redis的实现作为会话处理程序存在同样的问题。
对我来说,将方法_initSession
作为第一个方法放在我的bootstrap类中。
希望它会对某人有所帮助。