Announcement

Collapse
No announcement yet.

session problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • session problem

    nabend miteinander

    ich bin gerade dabei einige seiten mit hilfe eines kleinen selbstgeschriebenen loginscripts zu schützen, dieses bassiert auf sessions

    derzeit bekomme ich 2 fehlermeldungen
    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at ......

    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at ......
    ich habe schon mitbekommen, dass dies darann liegt, dass ich den start der session nicht zu 100% am anfang ausführe, aber mir fällt nicht ein, wie ich es anders realisieren kann, da dies der code ist, welcher am anfang meiner index.php ist über diese sämmtliche unterseiten eingebunden werden
    ....vllt hat ja jemand von euch eine idee hier mein code

    PHP Code:
    <?php
    require('inc/config.inc.php');
    require(
    'inc/funktionen.inc.php');

    $user_auslesen "SELECT * FROM `user` WHERE `Nick` = '".$_POST['user']."' AND `Passwort` = '".md5($_POST['pw'])."'";
    $user_ausgelesen mysql_query($user_auslesen);

    if(
    session_is_registered('user') || mysql_num_rows($user_ausgelesen) == 1)
        {
            
    session_start();
        }
    ?>

  • #2
    Hallo eaZy,

    Diese Warnung kommt, wenn vor dem Senden einer Headerinformation (was z.B. das Setzen des Sessioncookies wäre) bereits eine Ausgabe von Content erfolgte, also irgendwo ein print(), echo() oder auch direkte Augabe von HTML-Code.
    Du solltest die Scripte in dieser Hinsicht mal abklopfen. Manchmal ist es nur ein überflüssiger Zeilenumbruch hinter ?> .
    Wenn das alles nichts bringt oder vorher schon Inhalt an den Browser gesendet werden muß, dann kannst du Ausgabepufferung mit ob_start() aktivieren.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      <Anmerkung>
      Ich gehe mal davon aus, daß du hier nur Beispielcode gepostet hast und in Wirklichkeit noch ein Validierung und/oder Maskierung der Nutzereingaben stattfindet. Falls nicht , solltest du dir mal Überlegen wie der Inhalt von $user_auslesen aussehen könnte, wenn der Nutzer folgendes im Feld user eingibt:
      ' OR 1=1 LIMIT 1;/*

      Wenn ich das dann mal ungeprüft einsetzen darf:
      SELECT * FROM `user` WHERE `Nick` = '' OR 1=1;/*' AND `Passwort` = '".md5($_POST['pw'])."'
      Für MySQL wird hier nur der erste Teil relevant und alles nach /* als Kommentar aufgefasst. Die Abfrage liefert in jedem Fall einen DS und mehr fragst du anschließend nicht ab.
      </Anmerkung>

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        hallo falk

        danke erstmal für deine antworten und ja später wird eine solche eingabe nichtmehr möglich sein wäre sonnst schon etwas unvorteilhaft^^

        die sache ist nur, dass ich jeden zeilenumbruch und ähnliches mal weggenommen habe jedoch die meldungen immernoch auftreten

        es würde mich freuen, wenn du mir den beispielcode vllt so anpasst, dass er theoretisch klappen müsste, also was du meinst mit zeilenumbrüchen, welche da genau weg müssen....

        und ich verstehe eins nicht, was interessiert eigendlich ein zeilenumbruch hinter
        PHP Code:
        ?> 
        ???

        nochmal danke

        Comment


        • #5
          Hallo eaZy,

          Alles was in einem PHP-Script nicht zwischen <?php ?> oder <? ?> eingeschlossen ist, wird vom PHP-Interpreter direkt als Output an den Client geschickt. Wie hier z.B.:
          PHP Code:
          <html>
          <body>
          <?php 
            
          echo 'Diese Ausgabe erfolgt mit PHP';
          ?>
          </body>
          </html>
          Das ist so gewollt und das ist OK so . Wenn jetzt allerdings ein Script, welches eigentlich keine direkten Ausgaben machen soll (wie mglws. die Includes config.inc.php und funktionen.inc.php), vor dem <?php oder nach dem ?> eine Leerzeile enthält, dann wird diese natürlich auch vom PHP-Interpreter ausgegeben. Normalerweise fällt das nicht auf, außer man will halt nochmal den Header ändern
          Zur Not bleibt dir ja immer noch die Ausgabepufferung.

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            PHP Code:
            <?php
            require('inc/config.inc.php');
            require(
            'inc/funktionen.inc.php');

            $user_auslesen "SELECT * FROM `user` WHERE `Nick` = '".$_POST['user']."'";
            $user_ausgelesen mysql_query($user_auslesen);

            if(
            session_is_registered('user') || mysql_num_rows($user_ausgelesen) == 1)
                {
                    
            session_start();
                    
            $asdf "alles im lot";
                }
            ?>
            das steht in zeile 1 und auch davor ist kein leerzeichen zeilenumbruch oder ähnliches... also müsste doch rein theoretisch alles klappen tut es aber nicht

            das mit der ausgabepufferung wäre zwar eine alternatieve, aber mich interessiert auch aus prinzip warum es nicht funktioniert

            Comment


            • #7
              Das Problem kann auch von den Skripten verursacht werden, die Du inkludierst. Hier gilt: sowohl Leerzeichen vor den PHP-Tags als auch Leerzeichen nach den PHP-Tags sind Output.

              Stefan
              >e-novative> - We make IT work for you.
              http://www.e-novative.de

              Comment

              Working...
              X