From 4df4ab500788f0792b75baf1fa98e4647d713ed1 Mon Sep 17 00:00:00 2001 From: corbosman <cor@xs4all.net> Date: Thu, 19 Feb 2015 08:55:09 -0500 Subject: [PATCH] session refactor and add redis driver --- program/lib/Roundcube/rcube.php | 29 +++++++++++++++++++++++++++-- 1 files changed, 27 insertions(+), 2 deletions(-) diff --git a/program/lib/Roundcube/rcube.php b/program/lib/Roundcube/rcube.php index 3aca888..42d8807 100644 --- a/program/lib/Roundcube/rcube.php +++ b/program/lib/Roundcube/rcube.php @@ -522,9 +522,12 @@ ini_set('session.cookie_httponly', 1); // use database for storing session data - $this->session = new rcube_session($this->get_dbh(), $this->config); + $storage = $this->config->get('session_storage', 'db'); + $this->session = $this->get_session($storage); + // 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')); @@ -534,10 +537,32 @@ // start PHP session (if not in CLI mode) if ($_SERVER['REMOTE_ADDR']) { - $this->session->start(); + $this->session->start($this->config); } } + /** + * 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 -- Gitblit v1.9.1