Kathi: Session + header() ohne "headers already sent"?

Hi alle,

habe folgendes Problem: Jede Seite meines Auftritts inkludiert als erstes eine PHP-Datei, in der u.a. festgestellt wird, ob der Benutzer diese Seite aufrufen darf. Falls nicht, möchte ich ihn per header() auf eine Fehlerseite schicken.

Das Problem dabei ist, dass für die Rechteprüfung $_SESSION benötigt wird, also session_start() aufgerufen werden muss. Wenn ich danach die Funktion header() aufrufe, bekomme ich auf vielen Systemen den üblichen "headers already sent"-Fehler. Gibt es eine Konstruktion, mit der ich das umgehen kann?

Habt Dank im Voraus!

Kathi

  1. Das Problem dabei ist, dass für die Rechteprüfung $_SESSION benötigt wird, also session_start() aufgerufen werden muss. Wenn ich danach die Funktion header() aufrufe, bekomme ich auf vielen Systemen den üblichen "headers already sent"-Fehler. Gibt es eine Konstruktion, mit der ich das umgehen kann?

    Ich hab das mal umgangen mit

    ob_start();  
    //hier session+header  
    ob_end_flush();  
    
    
  2. Moin!

    Das Problem dabei ist, dass für die Rechteprüfung $_SESSION benötigt wird, also session_start() aufgerufen werden muss. Wenn ich danach die Funktion header() aufrufe, bekomme ich auf vielen Systemen den üblichen "headers already sent"-Fehler. Gibt es eine Konstruktion, mit der ich das umgehen kann?

    Der "headers already sent" wird immer ausgelöst durch eine Ausgabe: Irgendein Zeichen außerhalb von <?php ?>, oder ein echo, print, var_dump ...

    Offenbar gibt deine Rechteprüfung was aus. Verhindere das. Die Fehlermeldung von PHP sagt dir, wo diese Ausgabe in den Skripten zu finden ist.

    - Sven Rautenberg

    1. Hallo Sven,

      ich glaube nicht, dass da wirklich was ausgegeben wird. session_start() sendet immer einen header, oder? Ich kann gerade nicht nachsehen, php.net ist derzeit down.

      Kathi

      1. Hello,

        ich glaube nicht, dass da wirklich was ausgegeben wird. session_start() sendet immer einen header, oder?

        session_start() sendet keinen Header, sondern trägt den Header zum Senden in die Liste der Header ein, genauso. wie set_cookie() und header() dies tun.

        Erst durch ein flush(), ein echo, ein print oder ähnliche Aktionen wird dann angefangen den Output-Buffer in Richtung Webserver zu leeren. Danach ist es zu spät, noch Header in die Liste einzutragen, da die dann ja schon mit abgeschickt wurde.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
      2. Hi,

        ich glaube nicht, dass da wirklich was ausgegeben wird.

        Wenn du glaubst, dass PHP dich anlügt - dann können wir uns die weitere Diskussion sparen.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. Lieber Chris, bitte lies die beiden vorangegangenen Beiträge nochmal. Dann wirst Du sehen, dass Du Dir die pampige Antwort hättest sparen können. :-(

          Kathi