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;
        }
    }