PHP-Login in Session

  • Hallo zusammen!

    Ich bin gerade dabei, eine Website für meine Gilde in einem Browsergame zu entwickeln.

    hier der Link:
    http://www.ddgames.3w4you.net/

    Ich beschäftig mich gerade mit MySql und php und hab da ein Registrierungsscript und loginscript und beides funktioniert auch. Man kann sich problemlos registrieren und anschließend mit den Daten einloggen.
    Man wird dann weitergeleitet auf eine Seit namens bof.htm... doch wenn man dann auf die neuen Button wie "Interner Bereich" oder News klickt, ist man wieder komplett ausgeloggt.
    Ich beschäftig mich erst seit 3 Tagen mit php und kenn mich daher noch nicht gut aus. Wäre euch sehr dankbar wenn ihr mir dabei helft das Problem mit dem ausgeloggt zuwerden beheben könnt!

    Hier ist mein loginscipt:


    Wo muss ich in dem Quell text was hinzufügen, damit man dann nach dem login nicht wieder ausgeloggt wird?



    Und noch was:

    PHP
    if($row->passwort == $passwort) 
        { 
        $_SESSION['username'] = $username; 
        echo "Login erfolgreich. <br> <a href=\"bof.htm\">Geschützer Bereich</a>";


    ^
    |
    Bei dem ausschnitt sieht man, dass wenn man sich richtig einloggt, eine komplett weiße Seite kommt, wo ein Link zu finden ist, der einem, beim anklicken zur bof.htm weiterleitet.
    Ich hab gehört, das wenn ich das php script in....:

    PHP
    if($row->passwort == $passwort) 
        { 
        $_SESSION['username'] = $username; 
        header(location "bof.htm");


    ...umschreibe, dass man sofort, wenn man sich richtig einloggt zur bof.htm weitergeleitet wird und dann net die nervige zwischenseite ( echo "Login erfolgreich. <br> <a href=\"geheim.php\">Geschützer Bereich</a>"; ) erscheint.
    Aber irgendwie funktioniert das nicht!?

    Bin euch echt dankbar wenn ihr mir da weiterhelfen könnt!!

    Grüße,
    Nico

  • nimm mal als erste PHP-Zeile:

    PHP
    error_reporting(E_ALL);


    und schau nach, ob du eine fehlermeldung bekommst.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Dein Fehler liegt hier:

    PHP
    header(location "bof.htm");


    das sollte so aussehen:

    PHP
    header("Location: bof.htm");

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Dein Fehler liegt hier:

    PHP
    header(location "bof.htm");


    das sollte so aussehen:

    PHP
    header("Location: bof.htm");





    Warning: Cannot modify header information - headers already sent by (output started at D:\inetpub\vhosts\3w4you.net\subdomains\ddgames\httpdocs\login.php:5) in D:\inetpub\vhosts\3w4you.net\subdomains\ddgames\httpdocs\login.php on line 20

    PHP
    if($row->passwort == $passwort) 
        { 
        $_SESSION['username'] = $username;
        header("Location: bof.htm");



    line 20 is: header("Location: bof.htm");

    funktioniert net :(

    ____________________________________________________________

    Zitat

    wo überprüfst du denn, ob ein User bereits eingeloggt ist oder nicht?


    das überprüf ich nicht, da ich leider nicht weiß wie das funktioniert

  • Ganz einfach: Du hast bestimmt eine Ausgabe vor deinem Header-Befehl. Nach der ersten Ausgabe kannst du keine header mehr senden.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • PHP
    <?php  session_start();  ?>  <?php  $verbindung = mysql_connect("localhost", "Login-Name" , "PW")  or die("Verbindung zur Datenbank konnte nicht hergestellt werden");  mysql_select_db("DB-Name") or die ("Datenbank konnte nicht ausgewählt werden");  $username = $_POST['username'];  $passwort = md5($_POST['password']);  $abfrage = "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";  $ergebnis = mysql_query($abfrage);  $row = mysql_fetch_object($ergebnis);  if($row->passwort == $passwort)      {      $_SESSION['username'] = $username;      header ("Location bof.htm")      }  else      {      echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.htm\">Login</a>";      }  ?>



    Ich hab keine Ausgabe vor dem Headerbefehl!

  • So hab jetzt was neues ausprobiert:



    checkuser.php sieht so aus:

    PHP
    <?php  
    session_start ();  
    if (!isset ($_SESSION['user_id']))  
    {  
      header ("Location: login.htm");  
    }  
    ?>



    Aber jetzt kann man sich leider gar nicht mehr einloggen.. :(

  • Na dann überleg mal warum das so sein könnte...

    Wenn deine Loginseite auch davor diesen Schnipsel hat, kommt es gar nicht zur Verarbeitung. Da die Session-Variable zu dem Zeitpunkt nicht gesetzt ist.

  • PHP
    <?php  session_start();  ?>  <?php  $verbindung = mysql_connect("localhost", "Login-Name" , "PW")  or die("Verbindung zur Datenbank konnte nicht hergestellt werden");  mysql_select_db("DB-Name") or die ("Datenbank konnte nicht ausgewählt werden");  $username = $_POST['username'];  $passwort = md5($_POST['password']);  $abfrage = "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";  $ergebnis = mysql_query($abfrage);  $row = mysql_fetch_object($ergebnis);  if($row->passwort == $passwort)      {      $_SESSION['username'] = $username;      header ("Location bof.htm")      }  else      {      echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.htm\">Login</a>";      }  ?>

    Ich hab keine Ausgabe vor dem Headerbefehl!

    ?>

    <?php


    Das dazwischen ist aber eine Ausgabe ;)

  • Nein. Wenn du ne Seite aufrufst, geht Apache her und liest die Datei. Wenn ein PHP-Parser darauf eingestellt ist, gibt er einfach aus, was drin steht und übergibt zwischendrin alles was in <?php un ?> steht dem Parser. Wenn da jetzt also steht:

    PHP
    <?php
    mach_was();
    ?>
    
    <?php
    mach_was_anderes($foo);
    ?>

    Dann Sendet Apache den ersten PHP-Teil an den PHP Parser, der gibt ggf. ne Ausgabe (also alles via echo/print) zurück, das hängt Apache dann an die Ausgabe mit drann. dann hat ber der PHP-Bereich mit ?> aufgehört, dann komt ne leerzeile, und die gehört zum dokument, also wird sie auch gesendet. Dann kommt nochmal ein <?php ... ?> hier wieder das gleiche.
    Man kann also sagen, PHP-Dateien sind HTML dateien, indenen aber code ausgeführt werden kann. und der steht dann, falls man ihne verwendet, in <?php und ?>. Nur zum verständniss.
    Noch ein bsp:


    Das führt dann zu folgender ausgabe:


    Wie du vielleicht erkannt hast, hat das FOrum auch nur den Code zwischen <?php und ?> in den PHP-Farben markiert ;)

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    Einmal editiert, zuletzt von Tobse (18. April 2010 um 22:21)

  • Sie müsste weg sein - kannste eh prüfen: Rechtsklick->Seitenquelltext Anzeigen->Strg/Ctrl+A. Wenn Leerzei -len/-chen da sind, werden sie blau markiert.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • PHP
    <?php  
       session_start();
       if (! isset($_SESSION['irgendwas']))
         die ("Nee, du nicht");
    ?>