thomascube
2011-02-02 88ca38a3561c8ee4688b4c1e430dee1756af45e4
Keep rcube_session->lifetime and keep_alive in sync

2 files modified
24 ■■■■ changed files
program/include/rcmail.php 1 ●●●● patch | view | raw | blame | history
program/include/rcube_session.php 23 ●●●● patch | view | raw | blame | history
program/include/rcmail.php
@@ -768,6 +768,7 @@
    // login succeeded
    if (is_object($user) && $user->ID) {
      $this->set_user($user);
      $this->session_configure();
      // set session vars
      $_SESSION['user_id']   = $user->ID;
program/include/rcube_session.php
@@ -50,14 +50,10 @@
  public function __construct($db, $lifetime=60)
  {
    $this->db = $db;
    $this->lifetime = $lifetime;
    $this->start = microtime(true);
    $this->ip = $_SERVER['REMOTE_ADDR'];
    // valid time range is now - 1/2 lifetime to now + 1/2 lifetime
    $now = time();
    $this->now = $now - ($now % ($this->lifetime / 2));
    $this->prev = $this->now - ($this->lifetime / 2);
    $this->set_lifetime($lifetime);
    // set custom functions for PHP session management
    session_set_save_handler(
@@ -365,12 +361,29 @@
    return unserialize( 'a:' . $items . ':{' . $serialized . '}' );
  }
  /**
   * Setter for session lifetime
   */
  public function set_lifetime($lifetime)
  {
      $this->lifetime = max(120, $lifetime);
      // valid time range is now - 1/2 lifetime to now + 1/2 lifetime
      $now = time();
      $this->now = $now - ($now % ($this->lifetime / 2));
      $this->prev = $this->now - ($this->lifetime / 2);
  }
  /**
   * Setter for keep_alive interval
   */
  public function set_keep_alive($keep_alive)
  {
    $this->keep_alive = $keep_alive;
    if ($this->lifetime < $keep_alive)
        $this->set_lifetime($keep_alive + 30);
  }
  /**