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,36 +125,13 @@
    return false;
  }
  // 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));
  $caching = $rcmail->config->get('enable_caching');
  if ($rcmail->config->get('enable_caching'))
    rcmail_cache_gc();
  if (sizeof($exp_sessions)) {
    // delete session cache records
    if ($caching) {
      $DB->query("DELETE FROM " . get_table_name('cache') . "
                  WHERE session_id IN ('".join("','", $exp_sessions)."')");
    }
    // delete session records
    $DB->query("DELETE FROM " . get_table_name('session') . "
                WHERE sess_id IN ('".join("','", $exp_sessions)."')");
  }
  // also run message cache GC
  if ($caching) {
    rcmail_message_cache_gc();
  }
  rcmail_temp_gc();
  return true;