Karl: Php Menü

Hiho,

Ich hab mir ein php Menü für eine Website geschrieben bei der ich Sessions benutzen will.

  
  
<?php  
  if (isset($_GET['go']))  
  {  
  session_start();  
  $userid=$_SESSION['id'];  
  switch($_GET['go'])  
  {  
  case 'start':include('start.php');  
  break;  
  case 'fordern':include('fordern.php');  
  break;  
  case 'spiele':include('spiele.php');  
  break;  
  default:include('start.php');  
  }  
  }  
  else  
  {  
  include('start.php');  
  }  
   ?>  

Die Seiten werden zwar korrekt aufgerufen d.h. das bei jedem User das Richtige angezeigt wird.
Nur leider wird mir immer am Anfang der Seite folgende Fehlermeldung angezeigt:"Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /users/home/www/filemanager/try/phpmenu.php:2) in /users/home/www/filemanager/try/phpmenu.php on line 5"

Verträgt sich include nicht mir Session oder wo liegt der Fehler?

danke schon jetzt

mfg

Karl

  1. Hallo,

    Nur leider wird mir immer am Anfang der Seite folgende Fehlermeldung angezeigt:"Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /users/home/www/filemanager/try/phpmenu.php:2) in /users/home/www/filemanager/try/phpmenu.php on line 5"

    dann schau mal nach, was in Zeile 2 des Scripts steht. Offensichtlich ist da schon eine Ausgabe an den Browser gesendet worden. Ich tippe auf eine Leerzeile.

    Verträgt sich include nicht mir Session oder wo liegt der Fehler?

    Das verträgt sich im Prinzip schon - du kannst nur keine HTTP-Header mehr senden, sobald die erste Ausgabe an den Client rausging.[1]

    So long,
     Martin

    [1] Okay, es gibt noch output buffering, aber das ist IMHO eine Krücke, die man nur im Notfall verwenden, aber keinesfalls empfehlen sollte.

    --
    Ist die Katze gesund,
    freut sich der Hund.
    1. Hallo,

      danke für die Antworten.
      Hatte erst in der zweiten Zeile zu schreiben begonnen. >.<

      Ich würde noch gerne wissen, ob Sessions "sicher" sind oder ob es besser wäre bei jedem Login über einen Algorithmus eine eigene session-id zu berechnen und die jeweils per get zu übergeben.

      Brauche das ganze für ein php-basierendes Browsergame und da sollten Accounthacks möglichst vermieden werden.

      mfg

      Karl

      1. Hi,

        danke für die Antworten.
        Hatte erst in der zweiten Zeile zu schreiben begonnen. >.<

        sowas hatte ich vermutet. Dann wird der Zeilenumbruch vor dem <?php schon als Nutzinhalt angesehen, der die Ausgabe der Header abschließt.

        Ich würde noch gerne wissen, ob Sessions "sicher" sind oder ob es besser wäre bei jedem Login über einen Algorithmus eine eigene session-id zu berechnen und die jeweils per get zu übergeben.

        Also Sessions nachzubauen? Nein, was du hier vorschlägst, ist genau das, was der Session-Mechanismus von PHP auch tut. Dabei wird die Session-ID entweder per Cookie übergeben, wenn der Client Cookies akzeptiert, oder alternativ als URL-Parameter.

        Brauche das ganze für ein php-basierendes Browsergame und da sollten Accounthacks möglichst vermieden werden.

        Ganz verhindern kannst du sie nie. Aber ehrlich gesagt: Ein GET-Parameter ist sicher einfacher zu "fälschen" als ein Cookie.

        So long,
         Martin

        --
        Moskito, ergo summ.
        1. Hey,

          danke für die Info. :)

          mfg Karl

  2. Lieber Karl,

    oder wo liegt der Fehler?

    der "Fehler" liegt bei Dir. Du hast anscheinend das Kapitel zu Sessions in PHP nicht genügend aufmerksam gelesen.

    Finde heraus, wie PHP einen Client wiedererkennt (Hilfe: Cookies), und wie (und vor allem WANN) diese Information im HTTP übertragen wird. Überprüfe dann Dein Script hinsichtlich dieses Konzepts.

    Lesetipp: Die diversen "Note"s auf der Seite zu session_start()

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  3. Aloha 'oe,

    Die Seiten werden zwar korrekt aufgerufen d.h. das bei jedem User das Richtige angezeigt wird.
    Nur leider wird mir immer am Anfang der Seite folgende Fehlermeldung angezeigt:"Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /users/home/www/filemanager/try/phpmenu.php:2) in /users/home/www/filemanager/try/phpmenu.php on line 5"

    Verträgt sich include nicht mir Session oder wo liegt der Fehler?

    Hast du bevor du session_start() aufrufst schon eine HTML-Ausgabe? session_start() muss *vor* jeglichem HTML-Output aufgerufen werden. Hast du schon angefangen, eine Seite an den Client zu liefern, kannst du mittendrin nicht beschließen, eine Session zu starten.

    Gruß, Volker

    --
    „I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies."
    - Tony Hoare