Zend_Session_SaveHandler_DbTable()可以将session存储到数据库中。
这里我们存储到mysql数据库中。
(其实session最好存储到memcache中,主要原因memcache速度快,当然session少的时候也是可以存储到mysql中的)
要存储,首选要建表:
admin_session表
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for admin_session
-- ----------------------------
DROP TABLE IF EXISTS `admin_session`;
CREATE TABLE `admin_session` (
`id` char(32) NOT NULL,
`modified` int(10) unsigned DEFAULT '0',
`lifetime` int(10) unsigned DEFAULT '0',
`data` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
下一步 new Zend_Session_SaveHandler_DbTable()
数据库的配置信息我已写到配置文件里了,并通过Bootstrap.php文件获取了配置文件的信息
又因为我本身的程序直接继承的zend框架,所以像:
require_once 'Zend/Db.php';
require_once 'Zend/Session.php';
require_once 'Zend/Session/Namespace.php';
require_once 'Zend/Session/SaveHandler/DbTable.php'
都已继承了。
所以我们只需要session的一些数据方面的配置
数据库名
主键
字段等
$config = array(
'name' => 'admin_session',
'primaray' => 'id',
'modifiedColumn' => 'modified',
'dataColumn' => 'data',
'lifetimeColumn' => 'lifetime'
);
重要部分出现了:
Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));
设置要存储的
启动会话
Zend_Session::start();
启动会话就会向数据库admin_session中插入数据
INSERT INTO `admin_session` VALUES ('d09768b26473ab31a8f0d82d09c1b140', '1345785277', '1440', '');
要注意的是这时的data字段数据为空,其他id ,modified,lifetime都有数据。
直到new Zend_Session_Namespace(‘参数’),data才有数据,参数影响了data数据的内容。
假如参数是ca,data数据的内容就是ca|a:1:{s:3:"uid";N;}
假如参数是cao,data数据的内容就是cao|a:1:{s:3:"uid";N;}
假如第一次是ca,第二次是cao,data数据的内容就是ca|a:1:{s:3:"uid";N;}|cao|a:1:{s:3:"uid";N;}
自己慢慢理解吧。
登录的时候
$session = new Zend_Session_Namespace(SESSION_LOGIN); //new Zend_Session_Namespace(参数)
$session->uid = $user->uid; //给$session 对象属性赋值 $session->uid
退出的时候
//$session = new Zend_Session_Namespace(SESSION_LOGIN); // new Zend_Session_Namespace()对象
Zend_Session::namespaceUnset(SESSION_LOGIN); //使用namespaceUnset()注销某个命名空间及其内容。