| | |
| | | | 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: | |
| | |
| | | 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); |
| | |
| | | $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']); |
| | |
| | | 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; |
| | |
| | | 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; |