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