diff --git a/lib/sessionlib.php b/lib/sessionlib.php index 4729b6bea81..9e5c29f7384 100644 --- a/lib/sessionlib.php +++ b/lib/sessionlib.php @@ -605,7 +605,11 @@ class database_session extends session_stub { $ignoretimeout = false; if (!empty($record->userid)) { // skips not logged in if ($user = $this->database->get_record('user', array('id'=>$record->userid))) { - if (!isguestuser($user)) { + + // Refresh session if logged as a guest + if (isguestuser($user)) { + $ignoretimeout = true; + } else { $authsequence = get_enabled_auth_plugins(); // auths, in sequence foreach($authsequence as $authname) { $authplugin = get_auth_plugin($authname); @@ -925,9 +929,12 @@ function session_gc() { } $rs->close(); + // Extending the timeout period for guest sessions as they are renewed. $purgebefore = time() - $maxlifetime; + $purgebeforeguests = time() - ($maxlifetime * 5); + // delete expired sessions for guest user account - $DB->delete_records_select('sessions', 'userid = ? AND timemodified < ?', array($CFG->siteguest, $purgebefore)); + $DB->delete_records_select('sessions', 'userid = ? AND timemodified < ?', array($CFG->siteguest, $purgebeforeguests)); // delete expired sessions for userid = 0 (not logged in) $DB->delete_records_select('sessions', 'userid = 0 AND timemodified < ?', array($purgebefore)); } catch (dml_exception $ex) {