MDL-35029 core_session Refresh guest session if autologin as guest is enabled
authorDavid Monllao <davidm@moodle.com>
Thu, 23 Aug 2012 09:23:00 +0000 (17:23 +0800)
committerDavid Monllao <davidm@moodle.com>
Mon, 27 Aug 2012 09:03:11 +0000 (17:03 +0800)
lib/sessionlib.php

index 4729b6b..9e5c29f 100644 (file)
@@ -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) {