Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobocoder <anthon.pang@gmail.com>2011-07-03 05:36:31 +0400
committerrobocoder <anthon.pang@gmail.com>2011-07-03 05:36:31 +0400
commit340a868616c5cb5db173623cd4fa4983e1fe6875 (patch)
tree89b5db6c3d0fca7d66b7dc1a161974db94d8d340 /core/Session
parent8d2efe9ad3fff6b850860aae572c508f6787bde3 (diff)
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
Diffstat (limited to 'core/Session')
-rw-r--r--core/Session/SaveHandler/DbTable.php141
1 files changed, 141 insertions, 0 deletions
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 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ * @version $Id$
+ *
+ * @category Piwik
+ * @package Piwik
+ */
+
+/**
+ * Database-backed session save handler
+ *
+ * @package Piwik
+ * @subpackage Piwik_Session
+ */
+class Piwik_Session_SaveHandler_DbTable implements Zend_Session_SaveHandler_Interface
+{
+ protected $config;
+ protected $maxLifetime;
+
+ function __construct($config)
+ {
+ $this->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;
+ }
+}