Was ist der beste Weg, um mich unter php zu erinnern, wenn Sie native Sessions verwenden?

9

Früher habe ich einen zusätzlichen Cookie "rememberme" mit einem eindeutigen Hash erstellt, der in der Datenbank gespeichert und der Benutzer-ID zugeordnet wurde.

Wenn der Benutzer einen solchen Cookie hatte - die Website hat versucht, ihren Wert in der Datenbank zu finden, und wenn festgestellt wurde, dass die Sitzung eingerichtet wurde.

Später, als ich ein neues Projekt entwickelte, dachte ich, dass es vielleicht nicht sehr sicher ist, diesen einzigartigen Hash selbst zu generieren und zwei Cookies (native "PHPSESSID" + mein "rememberme") für eine Operation (Benutzeridentifikation) zu übertreiben.

Vielleicht gibt es eine Möglichkeit, nicht globale Sitzungslebensdauer einzurichten, sondern sie individuell für verschiedene Benutzersitzungen einzurichten ... oder ist es vielleicht besser, Benutzersitzungen in der Datenbank zu halten, die der Benutzerkennung zugeordnet sind?

UPDATE 1 Ich dachte, wenn es so schwer ist, sich an mich zu erinnern, können wir einen anderen Weg gehen - um "Nicht mein Computerknopf" zu machen. Idee ist es, die standardmäßige cookie_lifetime für eine Woche in der php.ini zu setzen (zum Beispiel), und wenn der Benutzer diese Checkbox ankreuzt - setzen wir cookie_lifetime mit der Funktion session_set_cookie_params auf Null.

Also, erste Frage ist - wird session_set_cookie_params die Cookies anderer Benutzer beeinflussen (in der Dokumentation heißt es, dass die Optionen von session_set_cookie_params wirksam werden, bis der php-Prozess ausgeführt wird)

2d Frage ist, dass, wenn session_set_cookie_params nicht die globalen Einstellungen beeinflusst, die Sitzungsregeneration Auswirkungen auf Benutzer hat, die keinen Longlife-Cookie behalten wollen?

UPDATE 2: [Frage 1 Antwort]

Habe gerade die Funktion session_set_cookie_params getestet. Ich schrieb ein Skript, das die Sitzungscookie-Lebenszeit mit session_set_cookie_params auf null setzt und dann 30 Sekunden lang ausführt:

%Vor%

Also, im ersten Browser habe ich gerade dieses Skript mit dem Parameter? test = 1 gestartet, gleich danach (während dieses Skript ausgeführt wurde) habe ich dieses Skript ohne Parameter im zweiten Browser gestartet. Die Antwort ist nein - der Browser des zweiten Browsers war nicht betroffen. Es hatte Lebenszeit, die in php.ini

angegeben wurde

UPDATE 3: [Frage 2 Antwort] Dann habe ich versucht zu prüfen, ob sich die Regeneration auf die Lebensdauer des Sitzungscookies auswirkt, die von session_set_cookie_params festgelegt wurde.

Ja, es wirkt sich aus. Wenn ich Sitzungscookie mit angepasster Lebenszeit einstelle, die von session_set_cookie_params gesetzt wurde, und dann session_regenerate_id () aufrufen, hat Cookie eine Lebenszeit, die in php.ini

eingestellt ist

Wenn wir jedoch session_set_cookie_params (0) vor dem Aufruf von session_regenerate_id () setzen, hat unser Cookie die korrekte Lebensdauer.

Also, das ist es! Das war einfach! 8)

Vielen Dank, meine Damen und Herren!

    
avasin 19.10.2012, 09:35
quelle

2 Antworten

2

Da es so schwer war, sich an die Checkbox-Funktion "Erinnere mich" zu erinnern, kam ich zu einem anderen Weg, indem ich nur einen Cookie verwendete.

VORBEREITUNG

1) Ich habe ein Formular mit drei Eingaben vorbereitet:

  • "login" -Eingabe [type = text]: Benutzer-Login
  • "Passwort" Eingabe [Typ = Passwort]: Benutzerpasswort
  • "nicht mein Computer" -Eingabe [type = checkbox]: Das wird uns sagen, Session-Cookie mit lifetime = 0 zu verwenden (Cookie muss gelöscht werden, wenn der Browser geschlossen wird)

2) Ich habe session.cookie_lifetime = 100500 eingestellt, um standardmäßig langlebige Cookies zu speichern.

COOKIE SETUP

Nachdem der Benutzer das Formular abgeschickt hat, überprüfen wir also, ob er kurze Sitzungen gewählt hat. Wir rufen session_set_cookie_params (0) auf, bevor wir ihm einen Sitzungscookie zuweisen (bevor wir session_start () verwenden).

COOKIE REGENERATION

Wenn wir Session-Cookies neu generieren müssen, können wir dies auch einfach mit der Funktion session_regenerate_id () tun. Aber wir müssen uns daran erinnern, dass diese Funktion die Sitzungs-Cookie-Lebensdauer standardmäßig von php.ini aus zurücksetzt. Daher müssen wir auch session_set_cookie_params () aufrufen, bevor ein Cookie neu generiert wird. Übrigens, Sie können die Lebensdauer des benutzerdefinierten Sitzungscookies in $ _SESSION speichern. Es sieht so aus:

%Vor%

Details für diese Antwort (und tiefere Erklärungen) können Sie im Fragetext finden (während ich testete, fügte ich Antworten / Tests dort hinzu)

    
avasin 21.10.2012, 01:05
quelle
2

Wenn Sie dies nur mit Sitzungen tun möchten, können Sie Folgendes tun, wenn der Benutzer erinnert werden möchte:

%Vor%

Hier können Sie mehr über die sitzungsbezogenen php.ini -Verzeichnisse lesen

    
MarcDefiant 19.10.2012 11:11
quelle

Tags und Links