Login System mit Sessions und AJAX

matzseesi

Erfahrenes Mitglied
Hi Leute,

Habe gerade ein Login System mit Ajax gebastelt. Dies läuft folgendermaßen ab.
Auf der Startseite werden Benutzername und Kennwort eingegeben, auf einen Loginbutton geklickt welcher beim klicken eine Javascript Funktion aufruft. diese Funktion leitet die Daten asynchron an ein PHPSkript weiter welches mittels Datenbank prüft ob dieser Benutzer vorhanden ist und ob das Passwort richtig ist! Dieses Skript gibt nur True (für login korrekt) bzw false (für Login inkorrekt) zurueck.

Falls der Login korrekt ist wird man zum internen Bereich weitergeleitet ansonsten wird mittels Javascript Alert ein Fehler ausgegeben.

Der Login funktioniert an sich problemlos doch nun möchte ich das ganze erweitern und zwar soll sich der Browser (falls der Benutzer das wünscht) den Login merken und eingeloggt bleiben.

So nun meine Frage:

Kann ich in dem PHP Skript, das mir überprüft ob der Benutzer korrekt ist, auch ein Cookie erstellen, welches dann auf der Website abrufbar ist?

z.B.: mit folgendem Code:

PHP:
  /*
   * stay_loggedin ist der name einer Checkbox => "Daten merken"
   */
  if(isset($_POST['stay_loggedin']))
  {
    setcookie("userid",$_SESSION['SES_userid']);
    setcookie("pw_hash",$password);
  }

Wenn ja dann müsste ich auf der angezeigten Seite doch mit folgendem Code das Cookie abrufen können oder?

PHP:
      echo $_COOKIE['userid'];
      echo $_COOKIE['pw_hash'];

PHP gibt mir aber folgende Fehlermeldung aus:

Code:
Notice: Undefined index: generalclan_userid in F:\eclipse-ws\generalclan_v2\index.php on line 119

Notice: Undefined index: generalclan_pw in F:\eclipse-ws\generalclan_v2\index.php on line 120

Warum funktioniert das erstellen des Cookies in der mit AJAX aufgerufenen Funktion nicht? bzw Warum kann ich das Cookie auf der angezeigten Seite nicht abfragen?

Würde mich auf eine Antwort freuen. Es tut mir jetzt schon leid falls ich manche Begriffe nicht richtig beschrieben habe aber es ist mein erster Versuch mit AJAX

Gruß

Matthias
 
Welche PHP-Version benutzt du denn? Erst seit PHP Version 4.1.0 wird die globale Variable $_COOKIE benutzt. Davor musst du mit $HTTP_COOKIE_VARS arbeiten.

Desweiteren würde ich mal prüfen, ob der Code in der if-Abfrage überhaupt aufgerufen wird. Das kannst du z.B. mit einer einfachen echo-Ausgabe machen:

PHP:
if(isset($_POST['stay_loggedin'])){
   echo "test";
   setcookie(...);
}

Wenn das nicht machbar ist, kannst du auch mit trigger_error() arbeiten und dann ins Logfile von deinem Webserver schauen.
 
Hi,

Danke für deine Antwort!
Als PHP Version kommt die 4.4.4 zum Einsatz und der Code wird aufgerufen ich habe es auch ohne If probiert!

Es scheint mir fast als würde die Verbindung die Ajax erstellt eine andere sein als die vom Browser doch dann würden die $_SESSION Variablen die ich im PHP Skript mit Daten fülle ja auch nicht erreichbar sein und die sind aber erreichbar! Was kann da sonst noch sein?

Gruß Matthias
 
Was meinst du mit "andere Verbindung"? Ajax öffnet einen sog. XML_HTTP_Request-Channel zum Server.

Andere Frage: Sind die Cookies ohne Ajax lesbar? An und für sich sollte das wunderbar harmonieren. Ajax überträgt die Cookie-Informationen genau wie ein "normaler" Browser-Request.

Versuch erstmal, ob dein Cookie unter reinen PHP->HTTP-Bedinungen funktioniert. Vielleicht hat es einen komplett anderen Grund, z.B. das dein Browser Cookies ablehnt ^^
 
Also wenn ich in der Seite ganz oben ein setcookie("bla","bla"); mache und dann unten mit var_dump($_COOKIE); ausgeben lasse dann kommt das daher! wenn ich allerdings meinen Login vollziehe und das Cookie setze dann steht in $_COOKIE nur die PHPSESSID drinnen!

Schräg oder?
 
Hi Leute,

Tut mir leid dass ich erst wieder so spät antworte. Habe gestern abend noch etwas rumprobiert und siehe da, er erstellt mir die Cookies! Hatte tatsächlich noch einen kleinen Fehler in der If Abfrage. Ich habe im Firefox unter Einstellungen => Cookies ansehen, gesehen dass er mir die beiden Cookies für die userid und den pw Hash erstellt jedoch kann ich diese nicht mit der $_COOKIE Variable abfragen. Warum nicht?
Er erstellt mir genau drei Cookies. Eines mit dem Inhalt PHPSESSID, eines mit userid und eines mit dem PW Hash. Doch in der $_COOKIES Variable steht nur das Cookie mit der PHPSESSID drinnen!

Würde mich auf eine kurze Antwort freuen

Gruß Matthias
 
Du solltest das Passwort oder ein Hash-Wert des Passworts niemals in einem Cookie speichern. Auch die Benutzer-ID ist dort nicht notwendig. Arbeite lieber mit einem System, das den Benutzer anhand eines zufälligen Schlüssels (ähnlich der Sitzungs-ID) identifiziert.
 
ja ok!

trotzdem funktioniert es nicht! hast du noch irgendwelche tipps wo man ansetzen könnte?
er erstellt mir das Cookie aber ich habe es nicht in der $_COOKIE Variable!

Gruß Matthias
 
Speichere den Status doch in der Sitzung und frage ihn von dort ab. Somit ist auch der Umweg über den Cookie nicht notwendig.
 
Zurück