Zend_Session之DB使用

在Zend Framework中我们通过Zend_Session_SaveHandler_DbTable可以很方便的将Session的存储放到数据库中。我将简单介绍如何将Session配置到数据库中。

 

首先是创建sessions表,以MYSQL为例

-- -- 表的结构 `sessions` -- CREATE TABLE IF NOT EXISTS `sessions` ( `id` char(32) collate utf8_unicode_ci NOT NULL, `modified` int(10) NOT NULL, `lifetime` int(10) NOT NULL, `data` text collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

接下来我们需要在Zend当中new一个Zend_Session_SaveHandler_DbTable,在那里加载合适呢?如果你使用的是Zend Framework1.8的话,可以在Bootstrap当中,通过application.ini来选定是否配置Zend_Session_SaveHandler_DbTable。如果是比较老的版本的话可直接写在入口文件index.php当中。下面我们就直接来配置它:

//-------------sessionDB--------------// require_once 'Zend/Db.php'; require_once 'Zend/Session.php'; require_once 'Zend/Session/Namespace.php'; require_once 'Zend/Session/SaveHandler/DbTable.php'; //通过Zend_Db工厂创建Db $dbAdapter = Zend_Db::factory('PDO_MYSQL',array( 'host' => 'localhost' ,'dbname' => '你的数据库名称' ,'username' => '用户名' ,'password' => '密码' ,'charset' => 'UTF8' )); //配置SessionDB字段 $dbColumn = array( 'db' => $dbAdapter ,'name' => 'sessions' ,'primary' => 'id' ,'modifiedColumn' => 'modified' ,'lifetimeColumn' => 'lifetime' ,'dataColumn' => 'data' ); //new Zend_Session_SaveHandler_DbTable Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($dbColumn)); //启动会话 Zend_Session::start(); $sess = new Zend_Session_Namespace('count'); if(isset($sess->count)) { $sess->count += 1; }else { $sess->count = 1; } echo $sess->count;

 

注意:

在使用Zend_Session::start()之前,比较将php.ini中的session.auto_start设置为0,否则的话将会报Zend_Session_Exception异常。

可以通过.htaccess中设置

php_value session.auto_start   0

你可能感兴趣的:(Zend_Session之DB使用)