(PHP) Probleme bei einem Loginscript

  • Hi Leute,
    ich hab bereits bei Google gesucht, alles mögliche ausprobiert und sogar hier im Forum gesucht und bin auch fündig geworden. Nun bin ich der Meinung, dass ich keinen Fehler mehr im Script haben sollte, aber irgendwie funktioniert das immer noch nicht!
    Es geht um ein klassisches Loginscript mit PHP,
    ich möchte dass sich der Benutzer einloggen und selbstverständlich wieder ausloggen kann!
    Aber wenn sich der Benutzer einloggt kommt er zwar kurz auf die nächste Seite, wird dann aber vermutlich aufgrund der automatischen Weiterleitung wieder zurück auf die index seite geschmissen.
    Ich hab also irgendwie Probleme mit der $_SESSION variable.
    Vorweg: ich benutze xampplite für einen virtuellen Server, bei dem register_globals Off ist.

    Hier die Codes:
    Für die erste Seite zum einloggen

    die logedin.php beginnt dann mit folgendem Code:

    PHP
    <?php
    session_start();
    error_reporting(E_ALL);
    if(!isset($_SESSION['email']) || $_SESSION['email'] == "") {
    header("Location: index.htm");
    exit;
    }
    ?>

    Übrigens hab ich alle html-Codes die zur hübscheren Darstellung dienten hier rausgenommen weil der code sonst total lang wäre! ;)

    Kann es evtl. auch an meinem xampplite liegen, dass der die $_SESSION nicht speichert oder fehlt mir da ein Befehl? Ich arbeite das erste mal mit SESSIONs und hatte auch so schon Probleme genug weil ich erst mit session_register() gearbeitet habe und ich erst später gemerkt habe dass das nichtmehr geht.

    Würd mich freuen wenn ihr mir helft, ich bin echt verzweifelt da ich den Fehler nicht finde!

  • XSS/MYSQLINJECTION gefahr
    Ansonsten überprüfe doch mal zb mit "die" ob den Session da sind oder keine
    Was soll den die JS Weiterleitung ?

  • Und bitte kein Passwort per GET weiterreichen!

    Richtig debuggen
    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL); und ini_set("display_errors", true);
    3. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
    5. Schritt 3 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

  • Gut die Antworten haben mir nicht sehr geholfen! ;P Den Fehler hab ich jetzt gefunden!

    PHP
    <?php
    if(!isset($_SESSION['email']) || $_SESSION['email'] == "") {
    header("Location: index.htm");
    exit;
    }
    ?>

    hat im grunde ja ausgesagt, dass wenn die $_SESSION gesetzt ist, er wieder zurück auf die index seite kommt! Und das sollte ja eben nicht passieren! wie kann ich denn jetzt ändern dass wenn $_SESSION nicht gesetzt ist er dann an die index.htm weiterleitet?

    Und jetzt habe ich noch zwei weitere fragen:
    Zum einen: Warum sollte man Passwörter nicht mit GET weiterreichen und was sollte ich stattdessen benutzen?
    Und wie kann ich das ganze jetzt sicherer machen? Immerhin hies es ja "XSS/MYSQLINJECTION gefahr".

  • ich wusste wohl dass es den befehlt POST gibt und ähnlich ist wie GET aber wusste nicht worin sie sich unterscheiden, wieder was gelernt vielen dank! ;)

    irgendwie peil ich mein fehler jetzt doch nicht mehr, ich dachte, wenn ich isset davor stehen habe prüft er ob $_SESSION nicht null ist und eine variable exisitiert (laut php.net). wenn sich jetzt also auf der ersten seite jemand einloggt, sollte doch eine variable erstellt werden und die ist nicht null, somit ist ist dann isset true und es soll weiter gehen? Oo

    bitte klärt mich auf denn ich liege offensichtlich komplett falsch O.o

    edit: ich hab das ausrufezeichen garnicht beachtet :D entschuldigung ich probiers jetzt nochmal aus :D

    Einmal editiert, zuletzt von snK (17. Mai 2010 um 19:31) aus folgendem Grund: kein doppelpost

  • Zum einen: Warum sollte man Passwörter nicht mit GET weiterreichen und was sollte ich stattdessen benutzen?


    POST nehmen, dann steht das Passwort nicht mehr in der URL


    Und wie kann ich das ganze jetzt sicherer machen? Immerhin hies es ja "XSS/MYSQLINJECTION gefahr".


    $_SERVER['PHP_SELF'] und xss bei google eingeben. Und mysql_real_escape_string in der PHP-Doku