From 340a868616c5cb5db173623cd4fa4983e1fe6875 Mon Sep 17 00:00:00 2001 From: robocoder Date: Sun, 3 Jul 2011 01:36:31 +0000 Subject: refs #2491 - replace Zend_Session_SaveHandler_DbTable with a leaner and cleaner implementation git-svn-id: http://dev.piwik.org/svn/trunk@4969 59fd770c-687e-43c8-a1e3-f5a4ff64c105 --- core/Session/SaveHandler/DbTable.php | 141 +++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 core/Session/SaveHandler/DbTable.php (limited to 'core/Session') diff --git a/core/Session/SaveHandler/DbTable.php b/core/Session/SaveHandler/DbTable.php new file mode 100644 index 0000000000..b5cf0c8ba0 --- /dev/null +++ b/core/Session/SaveHandler/DbTable.php @@ -0,0 +1,141 @@ +config = $config; + $this->maxLifetime = ini_get('session.gc_maxlifetime'); + } + + /** + * Destructor + * + * @return void + */ + public function __destruct() + { + Zend_Session::writeClose(); + } + + /** + * Open Session - retrieve resources + * + * @param string $save_path + * @param string $name + * @return boolean + */ + public function open($save_path, $name) + { + $this->config['db']->getConnection(); + + return true; + } + + /** + * Close Session - free resources + * + * @return boolean + */ + public function close() + { + return true; + } + + /** + * Read session data + * + * @param string $id + * @return string + */ + public function read($id) + { + $sql = 'SELECT '.$this->config['dataColumn'].' FROM '.$this->config['name'] + .' WHERE '.$this->config['primary'].' = ?' + .' AND '.$this->config['modifiedColumn'].' + '.$this->config['lifetimeColumn'].' < ?'; + + $result = $this->config['db']->fetchOne($sql, array($id, time())); + if(!$result) + $result = ''; + + return $result; + } + + /** + * Write Session - commit data to resource + * + * @param string $id + * @param mixed $data + * @return boolean + */ + public function write($id, $data) + { + $sql = 'INSERT INTO '.$this->config['name'] + .' ('.$this->config['primary'].',' + .$this->config['modifiedColumn'].',' + .$this->config['lifetimeColumn'].',' + .$this->config['dataColumn'].')' + .' VALUES (?,?,?,?)' + .' ON DUPLICATE KEY UPDATE ' + .$this->config['modifiedColumn'].' = ?,' + .$this->config['lifetimeColumn'].' = ?,' + .$this->config['dataColumn'].' = ?'; + + $this->config['db']->query($sql, array($id, time(), $this->maxLifetime, $data, time(), $this->maxLifetime, $data)); + + return true; + } + + /** + * Destroy Session - remove data from resource for + * given session id + * + * @param string $id + * @return boolean + */ + public function destroy($id) + { + $sql = 'DELETE FROM '.$this->config['name'] + .' WHERE '.$this->config['primary'].' = ?'; + + $this->config['db']->query($sql, array($id)); + + return true; + } + + /** + * Garbage Collection - remove old session data older + * than $maxlifetime (in seconds) + * + * @param int $maxlifetime + * @return true + */ + public function gc($maxlifetime) + { + $sql = 'DELETE FROM '.$this->config['name'] + .' WHERE '.$this->config['modifiedColumn'].' + '.$this->config['lifetimeColumn'].' < ?'; + + $this->config['db']->query($sql, array(time())); + + return true; + } +} -- cgit v1.2.3