Wie man ein Benutzer angemeldet ist, meine website über ein php-session-cookie

Anfangs kam ich mit der folgenden, um zu sehen, ob ein Benutzer bereits angemeldet:

<?php 
  session_start();
  if(!isset($_SESSION['sessionid'])) {
   header("Location: login_form.php");
  } else {
   echo "You are logged in";
  }
?>

$_SESSION['sessionid'] wird festgelegt, wenn der Benutzer manuell anmeldet.

Wenn der Benutzer prüft, "remember me" habe ich das session-cookie zu 10 Jahren:

   $lifetime = 24*60*60*365*10; //10 years
   setcookie(session_name(),session_id(),time()+ $lifetime,'/'); 

So, jetzt brauche ich, um herauszufinden, was zu tun ist, auf der server-Seite.... Zunächst dachte ich an die Einstellung session.gc_maxlifetime auf einen hohen Wert, so dass der server die session-Daten Leben würde für eine lange Zeit, aber 10 Jahre wäre lächerlich. Jetzt denke ich, ich sollte speichern der session-ID in die user-Tabelle und der Abfrage, die gegen die session-ID. Wenn es eine übereinstimmung gibt, werde ich die automatische Anmeldung der Benutzer in.

Meine Frage ist:
Wie bekomme ich die session-ID vom client?

Mein Verständnis ist, dass es verfügbar sein wird, nachdem ich den Aufruf session_start(), aber nur, wenn der server die session-Daten ist noch verfügbar. Wenn die Sitzung abgelaufen ist (das passiert je nach dem Wert von session.gc_maxlifetime) eine neue session-ID wird generiert, wenn session_start() aufgerufen wird. Dies wäre problematisch, als wäre es nicht die Letzte session-ID, die ich gespeichert in der Tabelle user.

Also die Ideen, die ich Lesen Sie die session-ID, nach dem Aufruf von session_start() sind:
1) $_SESSION['sessionid']
2) $id = session_id();
3) $_COOKIE["PHPSESSID"];

1 und 2 nicht funktionieren, wenn der server wurde zerstört, die session-Daten, damit ich nicht denke, ich kann diese verwenden.

3 könnte funktionieren, aber wenn ich es versuchte (echo $_COOKIE["PHPSESSID"];) ich war überrascht, weil die session-ID wurde zweimal aufgetreten:
die Ausgabe war:

htknitopug4b6bv4ql9050pfg6 //htknitopug4b6bv4ql9050pfg6

Habe ich einfach erwartet, dass der Ausgang htknitopug4b6bv4ql9050pfg6.

Kann jemand erklären, die doppelte Eingabe der session-ID? Wenn dieses Verhalten ist konsistent, ich könnte immer Lesen Sie den ersten string in meine Datenbank-Tabelle.

  • Ich würde vorschlagen, Sie geben diese Antwort, gelesen zu werden. Kurz gesagt, Sie sollte das nicht tun...
  • Ich denke, 10 Jahre ist viel zu lange.
  • Ich sah an cookies auf meinem computer und sah einige von amazon, die verfallen in 2037. Ich konnte nicht sehen, den Schaden, so dass Sie ewig Leben (also 10 Jahre).
  • ircmaxell, danke für den link. Ich denke, dass meine Methode der Verwendung einer session-ID in Ordnung ist. Ich regenerieren kann die session-ID jedes mal, wenn der Benutzer besucht, um für zusätzliche Sicherheit. Plus ich bin die Speicherung von Hash-Versionen der Passwörter in der Datenbank. Kennst du zufällig die Antworten zu den zwei Fragen, die ich gepostet?
  • Sitzung - cookies, die so lange Leben, sind schlecht. Tracking und denken Sie daran-mir-cookies, die so lange Leben werden just fine. Aber Sitzungen sollte kurz gehalten werden... Haben einen separaten remember-me-Funktion. Wenn beim start der session, es erkennt eine neue, dann schlagen Sie erinnere dich an mich cookie und testen Sie, dass eine automatische Anmeldung (würde ich sehr empfehlen, signieren es wie in der verlinkten Antwort). Die session-id sollte nicht missbraucht werden wie die. (Und ich hoffe, du bist nicht nur die Speicherung eines raw-hash, verwenden Sie ein Salz). Was war die andere Frage?
  • Ok, Sie fangen an mich zu überzeugen... 😉
  • Die zweite Frage war, warum der session-cookie enthält zwei session-IDs? Die gleiche ID nachgebetet wurde zweimal mit Schrägstrichen dazwischen (die Schrägstriche Aussehen wie C++ - Kommentare).
  • Es muss ein Fehler in deinem Programm. Überprüfen Sie die cookies von Ihrem browser gesendet, um zu überprüfen...
  • Ich würde mark als beantwortet, aber ich sehe keine button
  • Ich habe eine Zusammenfassung von den Kommentaren als Antwort...

InformationsquelleAutor user418775 | 2011-02-16
Schreibe einen Kommentar