Zend_Session以数据库存session方法

Zend_Session以数据库存session方法
在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以数据库存session方法)