在Zend Framework中我們通過Zend_Session_SaveHandler_DbTable可以很方便的將Session的儲存放到資料庫中。我將簡單介紹如何將Session配置到資料庫中。
首先是建立sessions表,以MYSQL為例
--<br />-- 表的結構 `sessions`<br />--<br />CREATE TABLE IF NOT EXISTS `sessions` (<br /> `id` char(32) collate utf8_unicode_ci NOT NULL,<br /> `modified` int(10) NOT NULL,<br /> `lifetime` int(10) NOT NULL,<br /> `data` text collate utf8_unicode_ci NOT NULL,<br /> PRIMARY KEY (`id`)<br />) 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--------------//<br />require_once 'Zend/Db.php';<br />require_once 'Zend/Session.php';<br />require_once 'Zend/Session/Namespace.php';<br />require_once 'Zend/Session/SaveHandler/DbTable.php';<br />//通過Zend_Db工廠建立Db<br />$dbAdapter = Zend_Db::factory('PDO_MYSQL',array(<br /> 'host' => 'localhost'<br /> ,'dbname' => '你的資料庫名稱'<br /> ,'username' => '使用者名稱'<br /> ,'password' => '密碼'<br /> ,'charset' => 'UTF8'<br /> ));<br />//配置SessionDB欄位<br />$dbColumn = array(<br /> 'db' => $dbAdapter<br /> ,'name' => 'sessions'<br /> ,'primary' => 'id'<br /> ,'modifiedColumn' => 'modified'<br /> ,'lifetimeColumn' => 'lifetime'<br /> ,'dataColumn' => 'data'<br />);<br />//new Zend_Session_SaveHandler_DbTable<br />Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($dbColumn));<br />//啟動會話<br />Zend_Session::start();<br />$sess = new Zend_Session_Namespace('count');<br />if(isset($sess->count)) {<br /> $sess->count += 1;<br />}else {<br /> $sess->count = 1;<br />}<br />echo $sess->count;<br />
注意:
在使用Zend_Session::start()之前,比較將php.ini中的session.auto_start設定為0,否則的話將會報Zend_Session_Exception異常。
可以通過.htaccess中設定
php_value session.auto_start 0