Add option to use PHP's native session save handlers

pull/79/head
Thomas Bruederli 11 years ago
parent 9749da9fcc
commit 42de33c7de

@ -0,0 +1,28 @@
#!/usr/bin/env php
<?php
/*
+-----------------------------------------------------------------------+
| bin/gc.sh |
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2013, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
| PURPOSE: |
| Trigger garbage collecting routines manually (e.g. via cronjob) |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
*/
define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' );
require INSTALL_PATH.'program/include/clisetup.php';
$rcmail = rcube::get_instance();
$rcmail->temp_gc();
$rcmail->cache_gc();

@ -254,9 +254,10 @@ $rcmail_config['session_name'] = null;
// Session path. Defaults to PHP session.cookie_path setting.
$rcmail_config['session_path'] = null;
// Backend to use for session storage. Can either be 'db' (default) or 'memcache'
// If set to memcache, a list of servers need to be specified in 'memcache_hosts'
// Backend to use for session storage. Can either be 'db' (default), 'memcache' or 'php'
// If set to 'memcache', a list of servers need to be specified in 'memcache_hosts'
// Make sure the Memcache extension (http://pecl.php.net/package/memcache) version >= 2.0.0 is installed
// Setting this value to 'php' will use the default session save handler configured in PHP
$rcmail_config['session_storage'] = 'db';
// Use these hosts for accessing memcached

@ -746,7 +746,7 @@ class rcmail extends rcube
// before closing the database connection, write session data
if ($_SERVER['REMOTE_ADDR'] && is_object($this->session)) {
session_write_close();
$this->session->write_close();
}
// write performance stats to logs/console

@ -457,7 +457,6 @@ class rcube
ini_set('session.name', $sess_name ? $sess_name : 'roundcube_sessid');
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.serialize_handler', 'php');
ini_set('session.cookie_httponly', 1);
// use database for storing session data
@ -471,7 +470,7 @@ class rcube
// start PHP session (if not in CLI mode)
if ($_SERVER['REMOTE_ADDR']) {
session_start();
$this->session->start();
}
}

@ -42,6 +42,7 @@ class rcube_session
private $secret = '';
private $ip_check = false;
private $logging = false;
private $storage;
private $memcache;
@ -59,11 +60,14 @@ class rcube_session
$this->set_lifetime($lifetime);
// use memcache backend
if ($config->get('session_storage', 'db') == 'memcache') {
$this->storage = $config->get('session_storage', 'db');
if ($this->storage == 'memcache') {
$this->memcache = rcube::get_instance()->get_memcache();
// set custom functions for PHP session management if memcache is available
if ($this->memcache) {
ini_set('session.serialize_handler', 'php');
session_set_save_handler(
array($this, 'open'),
array($this, 'close'),
@ -79,7 +83,9 @@ class rcube_session
true, true);
}
}
else {
else if ($this->storage != 'php') {
ini_set('session.serialize_handler', 'php');
// set custom functions for PHP session management
session_set_save_handler(
array($this, 'open'),
@ -92,6 +98,22 @@ class rcube_session
}
/**
* Wrapper for session_start()
*/
public function start()
{
session_start();
// copy some session properties to object vars
if ($this->storage == 'php') {
$this->key = session_id();
$this->ip = $_SESSION['__IP'];
$this->changed = $_SESSION['__MTIME'];
}
}
public function open($save_path, $session_name)
{
return true;
@ -115,6 +137,20 @@ class rcube_session
}
/**
* Wrapper for session_write_close()
*/
public function write_close()
{
if ($this->storage == 'php') {
$_SESSION['__IP'] = $this->ip;
$_SESSION['__MTIME'] = time();
}
session_write_close();
}
/**
* Read session data from database
*

Loading…
Cancel
Save