Répertoire de codes source
Classe pour gérer les sessions avec une base de données | |
---|---|
déposé par scramatte le 14/08/2007 nombre de visites : 8463 |
Cette classe permet de stocker vos sessions dans une base de données... |
---- session.sql ---- CREATE TABLE `sessions` ( `id` varchar(32) collate latin1_general_ci NOT NULL, `access` int(10) default NULL, `data` text collate latin1_general_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; ---- bootstrap (index.php) ---- ... Zend_Loader::loadClass('Zend_Db'); Zend_Loader::loadClass('Zend_Session'); Zend_Loader::loadClass('Concentre_Session_SaveHandler_Db'); $params = array() /* paramètres de connexion a la base de données */ $db = Zend_Db::factory('PDO_MYSQL', $params ); Zend_Session::setSaveHandler(new Concentre_Session_SaveHandler_Db($db)); ... ---- library/Concentre/Session/SaveHandler/Db.php ---- <?php class Concentre_Session_SaveHandler_Db implements Zend_Session_SaveHandler_Interface { private $_session; public $maxTime; private $db; public function __construct($database) { $this->db = $database; $this->maxTime['access'] = time(); $this->maxTime['gc'] = get_cfg_var('session.gc_maxlifetime'); /* session_set_save_handler(array($this, '_open'), array($this, 'close'), array($this, 'read'), array($this, 'write'), array($this, 'destroy'), array($this, 'gc') );*/ register_shutdown_function('session_write_close'); } public function open($save_path, $name) { $this->gc( $this->maxTime['gc'] ); return true; } public function close() { $this->gc($this->maxTime['gc']); return true; } public function read($id) { $allData = $this->db->fetchRow("SELECT `data` FROM `sessions` WHERE `id` = :id",array('id' => $id)); $hasData = (bool) $allData != null; return $hasData ? $allData['data'] : ''; } public function write($id, $data) { $set = array( 'id' => $id, 'access' => $this->maxTime['access'], 'data' => $data ); $where = $this->db->quoteInto("`id` = ?", $id); $rows_affected = $this->db->update('sessions', $set, $where); if ($rows_affected != 1) { $rows_affected = $this->db->insert('sessions', $set); } return $rows_affected; } public function destroy($id) { $where = $this->db->quoteInto("`id` = ?", $id); return $this->db->delete('sessions', $where); } public function gc($max) { $old = ($this->maxTime['access'] - $max); $where = $this->db->quoteInto("`access` < ?", $old); return $this->db->delete('sessions', $where); } } ?> |
|