$session_id, ) ); list ($sess_data) = $smcFunc['db_fetch_row']($result); $smcFunc['db_free_result']($result); return $sess_data; } /** * Implementation of sessionWrite() replacing the standard write handler. * * @param string $session_id * @param string $data * @return bool */ function sessionWrite($session_id, $data) { global $smcFunc; if (preg_match('~^[A-Za-z0-9,-]{16,32}$~', $session_id) == 0) return false; // First try to update an existing row... $result = $smcFunc['db_query']('', ' UPDATE {db_prefix}sessions SET data = {string:data}, last_update = {int:last_update} WHERE session_id = {string:session_id}', array( 'last_update' => time(), 'data' => $data, 'session_id' => $session_id, ) ); // If that didn't work, try inserting a new one. if ($smcFunc['db_affected_rows']() == 0) $result = $smcFunc['db_insert']('ignore', '{db_prefix}sessions', array('session_id' => 'string', 'data' => 'string', 'last_update' => 'int'), array($session_id, $data, time()), array('session_id') ); return $result; } /** * Implementation of sessionDestroy() replacing the standard destroy handler. * * @param string $session_id * @return bool */ function sessionDestroy($session_id) { global $smcFunc; if (preg_match('~^[A-Za-z0-9,-]{16,32}$~', $session_id) == 0) return false; // Just delete the row... return $smcFunc['db_query']('', ' DELETE FROM {db_prefix}sessions WHERE session_id = {string:session_id}', array( 'session_id' => $session_id, ) ); } /** * Implementation of sessionDestroy() replacing the standard gc handler. * Callback for garbage collection. * * @param int $max_lifetime * @return bool */ function sessionGC($max_lifetime) { global $modSettings, $smcFunc; // Just set to the default or lower? Ignore it for a higher value. (hopefully) if (!empty($modSettings['databaseSession_lifetime']) && ($max_lifetime <= 1440 || $modSettings['databaseSession_lifetime'] > $max_lifetime)) $max_lifetime = max($modSettings['databaseSession_lifetime'], 60); // Clean up after yerself ;). return $smcFunc['db_query']('', ' DELETE FROM {db_prefix}sessions WHERE last_update < {int:last_update}', array( 'last_update' => time() - $max_lifetime, ) ); }