src/ministruts/HttpSession.php
protected function init($suppressHeadersAlreadySentError = false) {
        /**
         * PHP laesst sich ohne weiteres manipulierte Session-IDs unterschieben, solange diese keine ungueltigen Zeichen
         * enthalten (IDs wie PHPSESSID=111 werden anstandslos akzeptiert).  Wenn session_start() zurueckkehrt, gibt es mit
         * den vorhandenen PHP-Mitteln keine vernuenftige Moeglichkeit mehr, festzustellen, ob die Session-ID von PHP oder
         * (kuenstlich?) vom User generiert wurde.  Daher wird in dieser Methode jede neue Session mit einer zusaetzliche
         * Markierung versehen.  Fehlt diese Markierung nach Rueckkehr von session_start(), wurde die ID nicht von PHP
         * generiert.  Aus Sicherheitsgruenden wird eine solche Session verworfen und eine neue ID erzeugt.
         */
        $request = $this->request;

        // Session-Cookie auf Application beschraenken, um mehrere Projekte je Domain zu ermoeglichen
        $params = session_get_cookie_params();
        session_set_cookie_params($params['lifetime'],
                                  $request->getApplicationBaseUri(),
                                  $params['domain'  ],
                                  $params['secure'  ],
                                  $params['httponly']);

        // Session starten bzw. fortsetzen
        try {
            session_start();                        // TODO: Handle the case when a session was already started elsewhere?
        }
        catch (PHPError $error) {
            if (preg_match('/The session id contains illegal characters/', $error->getMessage())) {
                session_regenerate_id();            // neue ID generieren
            }
            else if (preg_match('/- headers already sent (by )?\(output started at /', $error->getMessage())) {
                if (!$suppressHeadersAlreadySentError)
                    throw $error;
            }
            else {
                throw $error;
            }
        }


        // Inhalt der Session pruefen
        // TODO: Session verwerfen, wenn der User zwischen Cookie- und URL-Uebertragung wechselt
        if (sizeof($_SESSION) == 0) {           // 0 bedeutet, die Session ist (fuer diese Methode) neu
            $sessionName = session_name();
            $sessionId   = session_id();        // pruefen, woher die ID kommt ...

            // TODO: Verwendung von $_COOKIE und $_REQUEST ist unsicher
            if     (isset($_COOKIE [$sessionName]) && $_COOKIE [$sessionName] == $sessionId) $fromUser = true; // ID kommt vom Cookie
            elseif (isset($_REQUEST[$sessionName]) && $_REQUEST[$sessionName] == $sessionId) $fromUser = true; // ID kommt aus GET/POST
            else                                                                             $fromUser = false;

            $this->reset($fromUser);            // if $fromUser=TRUE: generate new session id
        }
        else {                                  // vorhandene Session fortgesetzt
            $this->new = false;
        }
    }
protected function init($suppressHeadersAlreadySentError = false) {
        /**
         * PHP laesst sich ohne weiteres manipulierte Session-IDs unterschieben, solange diese keine ungueltigen Zeichen
         * enthalten (IDs wie PHPSESSID=111 werden anstandslos akzeptiert).  Wenn session_start() zurueckkehrt, gibt es mit
         * den vorhandenen PHP-Mitteln keine vernuenftige Moeglichkeit mehr, festzustellen, ob die Session-ID von PHP oder
         * (kuenstlich?) vom User generiert wurde.  Daher wird in dieser Methode jede neue Session mit einer zusaetzliche
         * Markierung versehen.  Fehlt diese Markierung nach Rueckkehr von session_start(), wurde die ID nicht von PHP
         * generiert.  Aus Sicherheitsgruenden wird eine solche Session verworfen und eine neue ID erzeugt.
         */
        $request = $this->request;

        // Session-Cookie auf Application beschraenken, um mehrere Projekte je Domain zu ermoeglichen
        $params = session_get_cookie_params();
        session_set_cookie_params($params['lifetime'],
                                  $request->getApplicationBaseUri(),
                                  $params['domain'  ],
                                  $params['secure'  ],
                                  $params['httponly']);

        // Session starten bzw. fortsetzen
        try {
            session_start();                        // TODO: Handle the case when a session was already started elsewhere?
        }
        catch (PHPError $error) {
            if (preg_match('/The session id contains illegal characters/', $error->getMessage())) {
                session_regenerate_id();            // neue ID generieren
            }
            else if (preg_match('/- headers already sent (by )?\(output started at /', $error->getMessage())) {
                if (!$suppressHeadersAlreadySentError)
                    throw $error;
            }
            else {
                throw $error;
            }
        }


        // Inhalt der Session pruefen
        // TODO: Session verwerfen, wenn der User zwischen Cookie- und URL-Uebertragung wechselt
        if (sizeof($_SESSION) == 0) {           // 0 bedeutet, die Session ist (fuer diese Methode) neu
            $sessionName = session_name();
            $sessionId   = session_id();        // pruefen, woher die ID kommt ...

            // TODO: Verwendung von $_COOKIE und $_REQUEST ist unsicher
            if     (isset($_COOKIE [$sessionName]) && $_COOKIE [$sessionName] == $sessionId) $fromUser = true; // ID kommt vom Cookie
            elseif (isset($_REQUEST[$sessionName]) && $_REQUEST[$sessionName] == $sessionId) $fromUser = true; // ID kommt aus GET/POST
            else                                                                             $fromUser = false;

            $this->reset($fromUser);            // if $fromUser=TRUE: generate new session id
        }
        else {                                  // vorhandene Session fortgesetzt
            $this->new = false;
        }
    }
protected function init ( $ suppressHeadersAlreadySentError = false ) { /**
         * PHP laesst sich ohne weiteres manipulierte Session-IDs unterschieben, solange diese keine ungueltigen Zeichen
         * enthalten (IDs wie PHPSESSID=111 werden anstandslos akzeptiert).  Wenn session_start() zurueckkehrt, gibt es mit
         * den vorhandenen PHP-Mitteln keine vernuenftige Moeglichkeit mehr, festzustellen, ob die Session-ID von PHP oder
         * (kuenstlich?) vom User generiert wurde.  Daher wird in dieser Methode jede neue Session mit einer zusaetzliche
         * Markierung versehen.  Fehlt diese Markierung nach Rueckkehr von session_start(), wurde die ID nicht von PHP
         * generiert.  Aus Sicherheitsgruenden wird eine solche Session verworfen und eine neue ID erzeugt.
         */ $ request = $ this -> request ; // Session-Cookie auf Application beschraenken, um mehrere Projekte je Domain zu ermoeglichen $ params = session_get_cookie_params ( ) ; session_set_cookie_params ( $ params [ 'lifetime' ] , $ request -> getApplicationBaseUri ( ) , $ params [ 'domain' ] , $ params [ 'secure' ] , $ params [ 'httponly' ] ) ; // Session starten bzw. fortsetzen try { session_start ( ) ; // TODO: Handle the case when a session was already started elsewhere? } catch ( PHPError $ error ) { if ( preg_match ( '/The session id contains illegal characters/' , $ error -> getMessage ( ) ) ) { session_regenerate_id ( ) ; // neue ID generieren } else if ( preg_match ( '/- headers already sent (by )?\(output started at /' , $ error -> getMessage ( ) ) ) { if ( ! $ suppressHeadersAlreadySentError ) throw $ error ; } else { throw $ error ; } } // Inhalt der Session pruefen // TODO: Session verwerfen, wenn der User zwischen Cookie- und URL-Uebertragung wechselt if ( sizeof ( $ _SESSION ) == 0 ) { // 0 bedeutet, die Session ist (fuer diese Methode) neu $ sessionName = session_name ( ) ; $ sessionId = session_id ( ) ; // pruefen, woher die ID kommt ... // TODO: Verwendung von $_COOKIE und $_REQUEST ist unsicher if ( isset ( $ _COOKIE [ $ sessionName ] ) && $ _COOKIE [ $ sessionName ] == $ sessionId ) $ fromUser = true ; // ID kommt vom Cookie elseif ( isset ( $ _REQUEST [ $ sessionName ] ) && $ _REQUEST [ $ sessionName ] == $ sessionId ) $ fromUser = true ; // ID kommt aus GET/POST else $ fromUser = false ; $ this -> reset ( $ fromUser ) ; // if $fromUser=TRUE: generate new session id } else { // vorhandene Session fortgesetzt $ this -> new = false ; } }
Start and initialize the session.

@param  bool $suppressHeadersAlreadySentError [optional] - whether to suppress "headers already sent" errors
(default: no)
Start and initialize the session .