MDL-14992 refactored use of session_write_close()
authorskodak <skodak>
Sat, 17 Jan 2009 15:25:08 +0000 (15:25 +0000)
committerskodak <skodak>
Sat, 17 Jan 2009 15:25:08 +0000 (15:25 +0000)
15 files changed:
admin/cron.php
admin/dbtransfer/lib.php
course/report/log/index.php
course/report/log/live.php
draftfile.php
file.php
lib/dml/moodle_database.php
lib/filelib.php
lib/moodlelib.php
lib/sessionlib.php
mod/chat/gui_ajax/post.php
mod/chat/gui_header_js/insert.php
pluginfile.php
question/file.php
userfile.php

index f3e98bf..49d92a6 100644 (file)
@@ -37,7 +37,7 @@
     }
 
 /// extra safety
-    @session_write_close();
+    @session_get_instance()->write_close();
 
 /// check if execution allowed
     if (isset($_SERVER['REMOTE_ADDR'])) { // if the script is accessed via the web.
index 4241c30..c1d7858 100644 (file)
@@ -24,7 +24,7 @@ require_once($CFG->libdir.'/dtllib.php');
 function dbtransfer_export_xml_database($description, $mdb) {
     @set_time_limit(0);
 
-    session_write_close(); // release session
+    session_get_instance()->write_close(); // release session
 
     header('Content-Type: application/xhtml+xml');
     header('Content-Disposition: attachment; filename=database.xml');
@@ -45,7 +45,7 @@ function dbtransfer_export_xml_database($description, $mdb) {
 function dbtransfer_transfer_database($sourcedb, $targetdb) {
     @set_time_limit(0);
 
-    session_write_close(); // release session
+    session_get_instance()->write_close(); // release session
 
     $var = new database_mover($sourcedb, $targetdb);
     $var->export_database(null);
index 76186f1..052a571 100644 (file)
@@ -56,7 +56,7 @@
     $stradministration = get_string('administration');
     $strreports = get_string('reports');
 
-    session_write_close();
+    session_get_instance()->write_close();
 
     $navlinks = array();
 
index 8dce7e5..ebf4ad1 100644 (file)
@@ -18,7 +18,7 @@
 
     add_to_log($course->id, "course", "report live", "report/log/live.php?id=$course->id", $course->id); 
 
-    session_write_close();
+    session_get_instance()->write_close();
 
     // we override the default framename so header/footer
     // links open in a new window 
index 3908a7d..91b5f5e 100644 (file)
@@ -62,5 +62,5 @@
     // ========================================
     // finally send the file
     // ========================================
-    session_write_close(); // unlock session during fileserving
+    session_get_instance()->write_close(); // unlock session during fileserving
     send_stored_file($file, 0, false, true); // force download - security first!
index 00227f7..de2968c 100644 (file)
--- a/file.php
+++ b/file.php
@@ -93,7 +93,7 @@
     // ========================================
     // finally send the file
     // ========================================
-    session_write_close(); // unlock session during fileserving
+    session_get_instance()->write_close(); // unlock session during fileserving
     send_stored_file($file, $lifetime, $CFG->filteruploadedfiles, $forcedownload);
 
 
index 31c1fc0..08baff2 100644 (file)
@@ -246,7 +246,7 @@ abstract class moodle_database {
     public function dispose() {
         if ($this->used_for_db_sessions) {
             // this is needed because we need to save session to db before closing it
-            session_write_close();
+            session_get_instance()->write_close();
             $this->used_for_db_sessions = false;
         }
         if ($this->database_manager) {
index 6b2d221..14072b5 100644 (file)
@@ -787,7 +787,7 @@ function send_temp_file($path, $filename, $pathisstring=false) {
     global $CFG;
 
     // close session - not needed anymore
-    @session_write_close();
+    @session_get_instance()->write_close();
 
     if (!$pathisstring) {
         if (!file_exists($path)) {
@@ -874,7 +874,7 @@ function send_file($path, $filename, $lifetime = 'default' , $filter=0, $pathiss
         }
     }
 
-    session_write_close(); // unlock session during fileserving
+    session_get_instance()->write_close(); // unlock session during fileserving
 
     // Use given MIME type if specified, otherwise guess it using mimeinfo.
     // IE, Konqueror and Opera open html file directly in browser from web even when directed to save it to disk :-O
@@ -1078,7 +1078,7 @@ function send_stored_file($stored_file, $lifetime=86400 , $filter=0, $forcedownl
         ignore_user_abort(true);
     }
 
-    session_write_close(); // unlock session during fileserving
+    session_get_instance()->write_close(); // unlock session during fileserving
 
     // Use given MIME type if specified, otherwise guess it using mimeinfo.
     // IE, Konqueror and Opera open html file directly in browser from web even when directed to save it to disk :-O
index 35b071e..50c7ee7 100644 (file)
@@ -2182,7 +2182,7 @@ function require_logout() {
         }
     }
 
-    session_get_instance()->terminate();
+    session_get_instance()->terminate_current();
 }
 
 /**
index 8c3db52..e5603de 100644 (file)
@@ -33,7 +33,19 @@ function session_get_instance() {
 }
 
 interface moodle_session {
-    public function terminate();
+    /**
+     * Terminate current session
+     * @return void
+     */
+    public function terminate_current();
+
+    /**
+     * No more changes in session expected.
+     * Unblocks the sesions, other scripts may start executing in parallel.
+     * @return void
+     */
+    public function write_close();
+
 }
 
 /**
@@ -87,6 +99,52 @@ abstract class session_stub implements moodle_session {
         $this->check_security();
     }
 
+    /**
+     * Terminates active moodle session
+     */
+    public function terminate_current() {
+        global $CFG, $SESSION, $USER;
+
+        if (NO_MOODLE_COOKIES) {
+            return;
+        }
+
+        $_SESSION = array();
+
+        $SESSION  = new object();
+        $USER     = new object();
+        $USER->id = 0;
+        if (isset($CFG->mnet_localhost_id)) {
+            $USER->mnethostid = $CFG->mnet_localhost_id;
+        }
+
+        // Initialize variable to pass-by-reference to headers_sent(&$file, &$line)
+        $file = null;
+        $line = null;
+        if (headers_sent($file, $line)) {
+            error_log('Can not terminate session properly - headers were already sent in file: '.$file.' on line '.$line);
+        }
+
+        // now let's try to get a new session id and destroy the old one
+        @session_regenerate_id(true);
+
+        // close the session
+        @session_write_close();
+    }
+
+    /**
+     * No more changes in session expected.
+     * Unblocks the sesions, other scripts may start executing in parallel.
+     * @return void
+     */
+    public function write_close() {
+        if (NO_MOODLE_COOKIES) {
+            return;
+        }
+
+        session_write_close();
+    }
+
     /**
      * Initialise $USER object, handles google access.
      *
@@ -158,41 +216,12 @@ abstract class session_stub implements moodle_session {
 
             if ($_SESSION['USER']->sessionip != $remoteaddr) {
                 // this is a security feature - terminate the session in case of any doubt
-                $this->terminate();
+                $this->terminate_current();
                 print_error('sessionipnomatch2', 'error');
             }
         }
     }
 
-    /**
-     * Terminates active moodle session
-     */
-    public function terminate() {
-        global $CFG, $SESSION, $USER;
-
-        $_SESSION = array();
-
-        $SESSION  = new object();
-        $USER     = new object();
-        $USER->id = 0;
-        if (isset($CFG->mnet_localhost_id)) {
-            $USER->mnethostid = $CFG->mnet_localhost_id;
-        }
-
-        // Initialize variable to pass-by-reference to headers_sent(&$file, &$line)
-        $file = null;
-        $line = null;
-        if (headers_sent($file, $line)) {
-            error_log('Can not terminate session properly - headers were already sent in file: '.$file.' on line '.$line);
-        }
-
-        // now let's try to get a new session id and destroy the old one
-        @session_regenerate_id(true);
-
-        // close the session
-        @session_write_close();
-    }
-
     /**
      * Prepare cookies and varions system settings
      */
@@ -268,6 +297,7 @@ class legacy_file_session extends session_stub {
         }
         ini_set('session.save_path', $CFG->dataroot .'/sessions');
     }
+
 }
 
 /**
index 7c3302b..1989783 100755 (executable)
@@ -29,7 +29,7 @@ if (!$cm = get_coursemodule_from_instance('chat', $chat->id, $course->id)) {
 if (isguest()) {
     chat_print_error('ERROR', get_string('notlogged','chat'));
 }
-session_write_close();
+session_get_instance()->write_close();
 chat_delete_old_users();
 $chat_message = clean_text($chat_message, FORMAT_MOODLE);
 
index 797feb1..269ad81 100644 (file)
@@ -28,7 +28,7 @@
         print_error('noguests');
     }
 
-    session_write_close();
+    session_get_instance()->write_close();
 
 /// Delete old users now
 
index c47c863..7e95039 100644 (file)
             send_file_not_found();
         }
 
-        session_write_close(); // unlock session during fileserving
+        session_get_instance()->write_close(); // unlock session during fileserving
         send_stored_file($file, 60*60, 0, $forcedownload);
 
 
                 send_file_not_found();
             }
 
-            session_write_close(); // unlock session during fileserving
+            session_get_instance()->write_close(); // unlock session during fileserving
             send_stored_file($file, 0, 0, true);
 
         } else if ($filearea === 'course_intro') {
                 send_file_not_found();
             }
 
-            session_write_close(); // unlock session during fileserving
+            session_get_instance()->write_close(); // unlock session during fileserving
             send_stored_file($file, 60*60, 0, false); // TODO: change timeout?
 
         } else if ($filearea === 'user_profile') {
                 send_file_not_found();
             }
 
-            session_write_close(); // unlock session during fileserving
+            session_get_instance()->write_close(); // unlock session during fileserving
             send_stored_file($file, 0, 0, true); // must force download - security!
 
         } else {
index e0ab078..80e9615 100644 (file)
@@ -71,7 +71,7 @@
         }
 
         // send the file
-        session_write_close(); // unlock session during fileserving
+        session_get_instance()->write_close(); // unlock session during fileserving
         $filename = $args[count($args)-1];
         send_file($pathname, $filename, $lifetime, $CFG->filteruploadedfiles, false, $forcedownload);
     } else {
index ae5a49d..c7096cf 100644 (file)
@@ -83,5 +83,5 @@
     // ========================================
     // finally send the file
     // ========================================
-    session_write_close(); // unlock session during fileserving
+    session_get_instance()->write_close(); // unlock session during fileserving
     send_stored_file($file, 0, false, $forcedownload);