diff --git a/administrator/components/com_config/model/form/application.xml b/administrator/components/com_config/model/form/application.xml index 54c46e2d518bb..bf02e9cef9999 100644 --- a/administrator/components/com_config/model/form/application.xml +++ b/administrator/components/com_config/model/form/application.xml @@ -780,6 +780,16 @@ showon="session_handler:memcached" size="25" /> + + + + + + + + + + + + + + +
_servers = array( + array( + 'host' => $config->get('session_redis_server_host', 'localhost'), + 'port' => $config->get('session_redis_server_port', 6379), + 'persist' => $config->get('session_redis_server_persist', 1), + 'auth' => $config->get('session_redis_server_auth', ''), + 'db' => $config->get('session_redis_server_db', 0) + ) + ); + + parent::__construct($options); + } + + /** + * Register the functions of this class with PHP's session handler + * + * @return void + * + * @since 13.1 + */ + public function register() + { + if (!empty($this->_servers) && isset($this->_servers[0])) + { + $serverConf = current($this->_servers); + if ($serverConf['port'] == -1 || $serverConf['port'] == 0) + { + $savepath_connection = 'unix://' . $serverConf['host']; + } + else + { + $savepath_connection = 'tcp://' . $serverConf['host'] . ':' . $serverConf['port']; + } + $savepath_options = '?persistent=' . $serverConf['persist'] . '&auth=' . $serverConf['auth'] . '&database=' . $serverConf['db']; + ini_set('session.save_path', $savepath_connection . $savepath_options); + ini_set('session.save_handler', 'redis'); + } + } + + /** + * Test to see if the SessionHandler is available. + * + * @return boolean True on success, false otherwise. + * + * @since 13.1 + */ + static public function isSupported() + { + return (class_exists('Redis')); + } +} diff --git a/libraries/vendor/joomla/session/Joomla/Session/Storage/Redis.php b/libraries/vendor/joomla/session/Joomla/Session/Storage/Redis.php new file mode 100644 index 0000000000000..5f6efe297afb2 --- /dev/null +++ b/libraries/vendor/joomla/session/Joomla/Session/Storage/Redis.php @@ -0,0 +1,86 @@ +_servers = array( + array( + 'host' => isset($options['session_redis_server_host']) ? $options['session_redis_server_host'] : 'localhost', + 'port' => isset($options['session_redis_server_port']) ? $options['session_redis_server_port'] : 6379, + 'persist' => isset($options['session_redis_server_persist']) ? $options['session_redis_server_persist'] : 1, + 'auth' => isset($options['session_redis_server_auth']) ? $options['session_redis_server_auth'] : '', + 'db' => isset($options['session_redis_server_db']) ? $options['session_redis_server_db'] : 0 + ) + ); + + // Only construct parent AFTER host and port are sent, otherwise when register is called this will fail. + parent::__construct($options); + } + + /** + * Register the functions of this class with PHP's session handler + * + * @return void + * + * @since 13.1 + */ + public function register() + { + if ($this->_servers[0]['port'] == -1 || $this->_servers[0]['port'] == 0) + { + $savepath_connection = 'unix://' . $this->_servers[0]['host']; + } + else + { + $savepath_connection = 'tcp://' . $this->_servers[0]['host'] . ':' . $this->_servers[0]['port']; + } + $savepath_options = '?persistent=' . $this->_servers[0]['persist'] . '&auth=' . $this->_servers[0]['auth'] . '&database=' . $this->_servers[0]['db']; + ini_set('session.save_path', $savepath_connection . $savepath_options); + ini_set('session.save_handler', 'redis'); + } + + /** + * Test to see if the SessionHandler is available. + * + * @return boolean True on success, false otherwise. + * + * @since 13.1 + */ + static public function isSupported() + { + // GAE and HHVM have both had instances where Redis the class was defined but no extension was loaded. If the class is there, we can assume it works. + return (class_exists('Redis')); + } +}