program/lib/Roundcube/rcube.php | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_session.php | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_session_db.php | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_session_memcache.php | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_session_php.php | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_session_redis.php | ●●●●● patch | view | raw | blame | history |
program/lib/Roundcube/rcube.php
@@ -521,48 +521,17 @@ ini_set('session.use_only_cookies', 1); ini_set('session.cookie_httponly', 1); // use database for storing session data $storage = $this->config->get('session_storage', 'db'); $this->session = $this->get_session($storage); // get storage driver from config // $storage = $this->config->get('session_storage', 'db'); // register default gc handler $this->session->register_gc_handler(array($this, 'gc')); $this->session->set_secret($this->config->get('des_key') . dirname($_SERVER['SCRIPT_NAME'])); $this->session->set_ip_check($this->config->get('ip_check')); if ($this->config->get('session_auth_name')) { $this->session->set_cookiename($this->config->get('session_auth_name')); } // get session driver instance $this->session = rcube_session::factory($this->config); // start PHP session (if not in CLI mode) if ($_SERVER['REMOTE_ADDR']) { $this->session->start($this->config); $this->session->start(); } } /** * get an rcube_session instance * * @return rcube_session */ private function get_session($storage) { // class name for this storage $class = "rcube_session_" . $storage; // try to instantiate class if(class_exists($class)) { return new $class(); } // no storage found, raise error rcube::raise_error(array('code' => 604, 'type' => 'session', 'line' => __LINE__, 'file' => __FILE__, 'message' => "Failed to find session driver. Check session_storage config option"), true, true); } /** * Garbage collector - cache/temp cleaner program/lib/Roundcube/rcube_session.php
@@ -15,6 +15,7 @@ +-----------------------------------------------------------------------+ | Author: Thomas Bruederli <roundcube@gmail.com> | | Author: Aleksander Machniak <alec@alec.pl> | | Author: Cor Bosman <cor@roundcu.be> | +-----------------------------------------------------------------------+ */ @@ -43,6 +44,7 @@ protected $secret = ''; protected $ip_check = false; protected $logging = false; protected $config; /** * Blocks session data from being written to database. @@ -50,6 +52,54 @@ * @var boolean */ public $nowrite = false; /** * Factory, returns driver-specific instance of the class * * @param object $config * @return Object rcube_session */ public static function factory($config) { // get session storage driver $storage = $config->get('session_storage', 'db'); // class name for this storage $class = "rcube_session_" . $storage; // try to instantiate class if (class_exists($class)) { return new $class($config); } // no storage found, raise error rcube::raise_error(array('code' => 604, 'type' => 'session', 'line' => __LINE__, 'file' => __FILE__, 'message' => "Failed to find session driver. Check session_storage config option"), true, true); } /** * @param Object $config */ public function __construct($config) { $this->config = $config; // register default gc handler $this->register_gc_handler(array($this, 'gc')); // set secret $this->set_secret($this->config->get('des_key') . dirname($_SERVER['SCRIPT_NAME'])); // set ip check $this->set_ip_check($this->config->get('ip_check')); // set cookie name if ($this->config->get('session_auth_name')) { $this->set_cookiename($this->config->get('session_auth_name')); } } /** * register session handler @@ -73,13 +123,13 @@ /** * Wrapper for session_start() */ public function start($config) public function start() { $this->start = microtime(true); $this->ip = rcube_utils::remote_addr(); $this->logging = $config->get('log_session', false); $this->logging = $this->config->get('log_session', false); $lifetime = $config->get('session_lifetime', 1) * 60; $lifetime = $this->config->get('session_lifetime', 1) * 60; $this->set_lifetime($lifetime); session_start(); @@ -105,8 +155,9 @@ */ public function sess_write($key, $vars) { if ($this->nowrite) if ($this->nowrite) { return true; } // check cache $oldvars = $this->get_cache($key); @@ -201,12 +252,6 @@ protected function gc_shutdown() { if ($this->gc_enabled) { // just delete all expired sessions if ($this->storage == 'db') { $this->db->query("DELETE FROM {$this->table_name}" . " WHERE `changed` < " . $this->db->now(-$this->gc_enabled)); } foreach ($this->gc_handlers as $fct) { call_user_func($fct); } program/lib/Roundcube/rcube_session_db.php
@@ -33,8 +33,13 @@ private $db; private $table_name; public function __construct() /** * @param Object $config */ public function __construct($config) { parent::__construct($config); // get db instance $this->db = rcube::get_instance()->get_dbh(); program/lib/Roundcube/rcube_session_memcache.php
@@ -15,7 +15,7 @@ +-----------------------------------------------------------------------+ | Author: Thomas Bruederli <roundcube@gmail.com> | | Author: Aleksander Machniak <alec@alec.pl> | | Author: Cor Bosman <cor@roundcu.be> | | Author: Cor Bosman <cor@roundcu.bet> | +-----------------------------------------------------------------------+ */ @@ -32,8 +32,13 @@ { private $memcache; public function __construct() /** * @param Object $config */ public function __construct($config) { parent::__construct($config); $this->memcache = rcube::get_instance()->get_memcache(); if(! $this->memcache) { @@ -45,7 +50,6 @@ // register sessions handler $this->register_session_handler(); } /** program/lib/Roundcube/rcube_session_php.php
@@ -30,7 +30,6 @@ */ class rcube_session_php extends rcube_session { /** * native php sessions don't need a save handler * we do need to define abstract function implementations but they are not used. @@ -43,6 +42,13 @@ public function write($key, $vars) {} public function update($key, $newvars, $oldvars) {} /** * @param Object $config */ public function __construct($config) { parent::__construct($config); } /** * Wrapper for session_write_close() @@ -58,9 +64,9 @@ /** * Wrapper for session_start() */ public function start($config) public function start() { parent::start($config); parent::start(); $this->key = session_id(); $this->ip = $_SESSION['__IP']; program/lib/Roundcube/rcube_session_redis.php
@@ -13,8 +13,6 @@ | PURPOSE: | | Provide database supported session management | +-----------------------------------------------------------------------+ | Author: Thomas Bruederli <roundcube@gmail.com> | | Author: Aleksander Machniak <alec@alec.pl> | | Author: Cor Bosman <cor@roundcu.be> | +-----------------------------------------------------------------------+ */ @@ -30,8 +28,13 @@ private $redis; public function __construct() /** * @param Object $config */ public function __construct($config) { parent::__construct($config); // instantiate Redis object $this->redis = new Redis(); @@ -43,7 +46,7 @@ } // get config instance $hosts = rcube::get_instance()->config->get('redis_hosts', array()); $hosts = $this->config->get('redis_hosts', array('localhost')); // host config is wrong if (!is_array($hosts) || empty($hosts) ) { @@ -61,9 +64,9 @@ true, true); } foreach($hosts as $config) { foreach ($hosts as $host) { // explode individual fields list($host, $port, $database, $password) = array_pad(explode(':', $config, 4), 4, null); list($host, $port, $database, $password) = array_pad(explode(':', $host, 4), 4, null); // set default values if not set $host = ($host !== null) ? $host : '127.0.0.1'; @@ -115,7 +118,6 @@ // register sessions handler $this->register_session_handler(); } /**