alecpl
2009-05-04 23a2eec4d540b5f971ed6377e7ad776456ee0633
program/include/session.inc
@@ -5,7 +5,7 @@
 | program/include/session.inc                                           |
 |                                                                       |
 | This file is part of the RoundCube Webmail client                     |
 | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland                 |
 | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland                 |
 | Licensed under the GNU GPL                                            |
 |                                                                       |
 | PURPOSE:                                                              |
@@ -75,10 +75,12 @@
     WHERE  sess_id=?",
    $key);
  $now = $DB->fromunixtime(time());
  if ($DB->num_rows($sql_result)) {
    $DB->query(
      "UPDATE " . get_table_name('session') . "
       SET    vars=?, changed=" . $DB->now() . "
       SET    vars=?, changed= " . $now . "
       WHERE  sess_id=?",
      $vars,
      $key);
@@ -87,7 +89,7 @@
    $DB->query(
      "INSERT INTO " . get_table_name('session') . "
       (sess_id, vars, ip, created, changed)
       VALUES (?, ?, ?, ".$DB->now().", ".$DB->now().")",
       VALUES (?, ?, ?, " . $now . ", " . $now .")",
      $key,
      $vars,
      (string)$_SERVER['REMOTE_ADDR']);
@@ -107,11 +109,6 @@
    return false;
  }
  // delete session entries in cache table
  if ($rcmail->config->get('enable_caching')) {
    $DB->query("DELETE FROM " . get_table_name('cache') . " WHERE session_id=?", $key);
  }
  $DB->query("DELETE FROM " . get_table_name('session') . " WHERE sess_id=?", $key);
  return true;
@@ -128,39 +125,12 @@
    return false;
  }
  if ($rcmail->config->get('enable_caching')) {
    // get all expired sessions
    $sql_result = $DB->query(
   "SELECT sess_id
        FROM " . get_table_name('session') . "
        WHERE " . $DB->unixtimestamp($DB->now())."-".$DB->unixtimestamp('changed') . " > ?",
   $maxlifetime);
    $exp_sessions = array();
    while ($sql_arr = $DB->fetch_assoc($sql_result)) {
      $exp_sessions[] = $sql_arr['sess_id'];
    }
  // just delete all expired sessions
  $DB->query("DELETE FROM " . get_table_name('session') . "
    WHERE changed < " . $DB->fromunixtime(time() - $maxlifetime));
    if (sizeof($exp_sessions)) {
      $exp_sessions = "'" . join("','", $exp_sessions) . "'";
      // delete session cache records
      $DB->query("DELETE FROM " . get_table_name('cache') . "
            WHERE session_id IN (" . $exp_sessions . ")");
      // delete session records
      $DB->query("DELETE FROM " . get_table_name('session') . "
            WHERE sess_id IN (" . $exp_sessions . ")");
    }
    // also run message cache GC
    rcmail_message_cache_gc();
  } else {
    // just delete all expired sessions
    $DB->query("DELETE FROM " . get_table_name('session') . "
        WHERE " . $DB->unixtimestamp($DB->now())."-".$DB->unixtimestamp('changed') . " > ?",
   $maxlifetime);
  }
  if ($rcmail->config->get('enable_caching'))
    rcmail_cache_gc();
  rcmail_temp_gc();