Problem mit PHP-sessions

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit PHP-sessions

    Hallo,

    es geht um mein Einlog-Script. Hier der Anfang der Datei welche aufgerufen wird nachdem der Login-Button gedrückt wurde:

    <?php

    if($LoginButton == "Einloggen")
    {
    if($lnick == "")
    die("<p>Bitte einen Benutzernamen eintragen.</p>");

    if($lpw == "")
    die("<p>Bitte Passwort eintragen.</p>");

    if($prefix == " ")
    die("<p>Bitte Allianz auswählen.</p>");

    include("inc/dbconnect.php");
    $sql = "SELECT ID, nick, level, activated, pw FROM ".$prefix."users WHERE nick='$lnick'";
    $result = @mysql_query($sql);
    $row = @mysql_fetch_array($result);
    $pw = $row["pw"];
    if($lpw == $pw)
    {
    $activated = $row["activated"];
    if($activated == "N")
    die("<p>Du bist nocht nicht freigeschalten! Bitte wende dich an einen Admin.</p>");

    @session_start();
    $prefix = $_POST['prefix'];
    $uid = $row["ID"];
    $level = $row["level"];
    $user = $row["nick"];
    $eingeloggt = TRUE;
    session_register('eingeloggt');
    session_register('uid');
    session_register('level');
    session_register('user');
    session_register('prefix');
    }
    else
    die("<p>Nick/Passwort Kombination ungültig, bitte erneut versuchen.<br><a href='index.php'>Zurück</a>");
    }
    else
    {
    include("inc/session.php");
    }

    Wie man sieht wird nach dem Drücken des Einlogg-Buttons geprüft ober die User/Passwort-Kombination stimmt und falls ja wird geprüft ob der User freigeschalten wurde. Wenn dies alles wahr ist, wird die session gestartet und diverese Variablen registriert. Wird die Seite(im oberen Fall "home.php") erneut aufgerufen, ist die Variable $LoginButton nichtmehr gesetzt und die Datei session.php wird includet. Diese Datei wird auf jeder Seite oben mittels include("inc/session.php"") eingefügt und steht immer GANZ oben, vorher kommt kein Code.
    Hier die gesammte session.php:

    <?php
    @session_start();
    if ( !$_SESSION['eingeloggt'] )
    {
    die("<p>Sicherheitsfehler</p>");
    }
    $user = $_SESSION['user'];
    $level = $_SESSION['level'];
    $uid = $_SESSION['uid'];
    $prefix = $_SESSION['prefix'];

    ?>

    Ich habe ein @ vor session_start() geschrieben um die Fehlermeldung zu unterdrücken welche sonst IMMER kommt(egal wo session_start() steht). Diese sieht so aus:

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /srv/www/htdocs/web26/html/home.php:2) in /srv/www/htdocs/web26/html/home.php on line 26

    Sie haben oben ja den ganzen Anfang von home.php und können nachschauen was in den einzelnen Zeilen steht. So nun zu meinem Problem: In ca. 50% der Fälle klappt alles wunderbar und funktioniert so wie es soll, man kann die ganze Seite durchsurfen, so oft die Menü-Punkte anwählen wie man will.
    Aber genauso oft passiert es, dass man sich einloggt, der Inhalt von home.php auch richtig angezeigt wird, nur dann, egal wo man draufklickt(ob jetzt nochmal home.php oder andere Seiten auf denen oben immer als erstes session.php eingefügt wird), es kommt die Fehlermeldung "Sicherheitsfehler." was ja eigentlich bedeutet dass die Variable $eingeloggt in der session nicht existiert, was sie aber tun müsste(wir gehen immer davon aus dass sich der User erfolgreich eingeloggt hat). Ich weiß wirklich nicht woran das liegt. Die Tatsache, dass es auf dem alten Server(wie immer ) NIE Probleme damit gab und es ja auch manchmal funktioniert, zeigt dass der Code nicht sooo falsch sein kann.
    Wäre großartig wenn mir jemand helfen könnte das Problem zu lösen!

    mfg...
    Free Counter | Free Forum | Freemail | SubDomain | Top Foren | Bild-Hoster

  • #2
    vielen Dank fürs nutzen der [PHP]-Tags..

    Die idee zu suchen hattest du nicht?

    Kommentar


    • #3
      Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /srv/www/htdocs/web26/html/home.php:2) in /srv/www/htdocs/web26/html/home.php on line 26
      Das sagt, dass keine Session erzeugt werden konnte, weil vorher eine Ausgabe stattgefunden hat. Da aber Sessions mit Headern funktionieren, darf vor der Ausgabe von Headern keine Ausgabe an den Browser erfolgen, weil Header immer vor jeder Anzeige im Browser gesendet werden.

      Du kannst diese Fehlermeldung nicht einfach unterdrücken, es muss einen vernuenftigen Grund dafür geben.

      Wenn in deinem Auto die Motorueberhitzungsanzeige blinkt schlägst du ja auch nicht die LED kaputt und faehrst weiter, oder?

      Kommentar

      Lädt...
      X