Example #1
0
 /**
  * Start user session.
  *
  * Note: This is intended to be called only from lib/setup.php!
  */
 public static function start()
 {
     global $CFG, $DB;
     if (isset(self::$sessionactive)) {
         debugging('Session was already started!', DEBUG_DEVELOPER);
         return;
     }
     self::load_handler();
     // Init the session handler only if everything initialised properly in lib/setup.php file
     // and the session is actually required.
     if (empty($DB) or empty($CFG->version) or !defined('NO_MOODLE_COOKIES') or NO_MOODLE_COOKIES or CLI_SCRIPT) {
         self::$sessionactive = false;
         self::init_empty_session();
         return;
     }
     try {
         self::$handler->init();
         self::prepare_cookies();
         $newsid = empty($_COOKIE[session_name()]);
         self::$handler->start();
         self::initialise_user_session($newsid);
         self::check_security();
     } catch (\Exception $ex) {
         @session_write_close();
         self::init_empty_session();
         self::$sessionactive = false;
         throw $ex;
     }
     self::$sessionactive = true;
 }
Example #2
0
    /**
     * Start user session.
     *
     * Note: This is intended to be called only from lib/setup.php!
     */
    public static function start() {
        global $CFG, $DB;

        if (isset(self::$sessionactive)) {
            debugging('Session was already started!', DEBUG_DEVELOPER);
            return;
        }

        self::load_handler();

        // Init the session handler only if everything initialised properly in lib/setup.php file
        // and the session is actually required.
        if (empty($DB) or empty($CFG->version) or !defined('NO_MOODLE_COOKIES') or NO_MOODLE_COOKIES or CLI_SCRIPT) {
            self::$sessionactive = false;
            self::init_empty_session();
            return;
        }

        try {
            self::$handler->init();
            self::prepare_cookies();
            $isnewsession = empty($_COOKIE[session_name()]);

            if (!self::$handler->start()) {
                // Could not successfully start/recover session.
                throw new \core\session\exception(get_string('servererror'));
            }

            self::initialise_user_session($isnewsession);
            self::check_security();

            // Link global $USER and $SESSION,
            // this is tricky because PHP does not allow references to references
            // and global keyword uses internally once reference to the $GLOBALS array.
            // The solution is to use the $GLOBALS['USER'] and $GLOBALS['$SESSION']
            // as the main storage of data and put references to $_SESSION.
            $GLOBALS['USER'] = $_SESSION['USER'];
            $_SESSION['USER'] =& $GLOBALS['USER'];
            $GLOBALS['SESSION'] = $_SESSION['SESSION'];
            $_SESSION['SESSION'] =& $GLOBALS['SESSION'];

        } catch (\Exception $ex) {
            self::init_empty_session();
            self::$sessionactive = false;
            throw $ex;
        }

        self::$sessionactive = true;
    }