‚Remember Me‘ Login in CodeIgniter
-
05-07-2019 - |
Frage
Wie setzen Sie diese in CodeIgniter?
Lösung
(Diese Antwort war eine Antwort auf die ursprüngliche Frage)
Wie würden Sie das tun? Oder wie würde Sie erstellen eine Sitzung mit einem längeren Ablaufdatum als die andere?
Alle erstellten Sitzungen verwenden würden die gleicher $ config [ 'sess_expiration'] in der Konfigurationsdatei (Standard: 7200 Sekunden), gibt es eine Möglichkeit, einen eigenen Wert zu übergeben ?
Ablauf einer Session-Cookie Erweiterung wird nicht für eine „remember me“ -Funktion arbeiten, da die Benutzer ihre Session-Cookie verlieren, wenn sie den Browser schließen. Wenn Code Igniter keinen nativen haben „erinnern Feature“, dann werden Sie brauchen, um etwas zu schreiben, eine lange Lebensdauer Cookie zu löschen, die Informationen enthält, die eine automatische Anmeldung erlaubt, wenn der Server es sieht wieder.
Es gibt einen guten Artikel über rel="noreferrer">, der zusammengefasst werden als:
- Bei erfolgreicher Anmeldung des Benutzers mit Remember Me geprüft, ein Login Cookie wird zusätzlich zu den ausgegebenen Standard-Session-Management-Cookie. 2
- Der Login-Cookie enthält den Benutzernamen des Benutzers und eine Zufallszahl (Das „Token“ von hier an) von einem entsprechend großer Raum. Der Benutzername und das Token werden als Paar in einer gespeicherten Datenbanktabelle.
- Wenn ein nicht-angemeldete Benutzer die Website besucht und präsentiert einen Login-Cookie, der Benutzername und das Token nachgeschlagen in der Datenbank. 1. Wenn das Paar vorhanden ist, wird der Benutzer authentifiziert betrachtet. Der verwendete Token wird von der Abnehm Datenbank. Ein neues Token erzeugt wird, in der Datenbank mit dem Benutzernamen gespeichert, und über einen neuen Login an den Benutzer ausgegeben Plätzchen. 2. Wenn das Paar nicht vorhanden ist, wird der Login-Cookie ignoriert.
- Benutzer, die nur über diesen Mechanismus authentifiziert sind nicht sicher, erlaubt den Zugriff auf geschützte Informationen oder Funktionen wie ein Kennwort zu ändern, sehen persönliche Daten, oder Geld ausgeben. Zur Durchführung diejenigen Operationen, muss der Benutzer zuerst einreichen erfolgreich eine normale Benutzername / Passwort-Login-Formular.
- Da dieser Ansatz ermöglicht es dem Benutzer, mehrere in Erinnerung haben Logins von verschiedenen Browsern oder Computer, ist ein Mechanismus vorgesehen für der Benutzer alle in Erinnerung löschen Anmeldungen in einem einzigen Vorgang.
Ein weiterer Artikel, die mehr Sicherheit auf diese Ideen in Verbesserte rel="noreferrer">
Wenn Sie die Praktiken in diesen Artikeln folgen, werden Sie nicht viel falsch machen!
Andere Tipps
Sie möchten vielleicht den Vorschlag von ‚Verbesserte Persistent Login-Cookie-Best Practice‘ zu überdenken. Ich habe meine Analyse des Problems auf der Website veröffentlicht, aber der Kern von ihm ist diese:
Sie können keine Cookie-Diebstahl ohne eine sichere Leitung verhindern, egal, was
(* Mit 'sicherer Leitung', meine ich SSL / VPN-Tunneling / Public-Key-Verschlüsselung - oder ein robustes Challenge-Response-Schema *)
Ich bin für persistente Login Best Practices, aber es gibt einen Punkt, an dem keine Menge Tricks helfen wird, und wo die nur Weg nach oben ist SSL.
Danke für die Lösung. Ich habe dies in meinem CI-Projekt umgesetzt werden.
DEV Hinweis: das Cookie ein gesichertes-Hash als erinnere mich-Schlüssel haben sollte. - speichere nicht nur eine User-ID) - Sie ein Passwort nicht speichern, - und speichern keine Hash-Passwort. Auf diese Weise Menschen melden Sie sich bei einem Konto nicht automatisch können.
Worst-Case-Szenario: Sobald ein Hacker die Hash-Methode entdeckt, können Sie den Schlüssel Produzenten Funktion an einem Ort einstellen und Sie sind wieder mit Sicherheit einrichten. Ich würde nur das Salz und Pfeffer Saiten einzustellen.
Ich hoffe, das hilft. Chris D. - von Australien:)
Für diese Dinge können die CI Variablen in allen Klassen durch eine eigene Bibliothek zugegriffen werden:
Zum Beispiel:
$this->session->sess_expiration = 500000;
Ich hoffe, dass Ihr Problem lösen.
gibt es Bibliothek auf Github für mich erinnere herunterladen.
Mit Hilfe dieser Bibliothek setCookie () Funktion, geschieht Folgendes:
1.A Cookie erzeugt eine eindeutige Nummer enthält, Diese Nummer wird in eine Datenbanktabelle aufgezeichnet, die so genannte ci_cookies zusammen mit dem netid / username weitergegeben zu setCookie ()
2. Wenn die verifyCookie () Funktion Cookie-Hash ist der Browser aufgerufen wird, muss die Hash Match in die Datenbank aufgenommen. Ist dies der Fall, kehrt verifyCookie () true vorwärts es auf der Startseite
U braucht Set conf vor Last-Sitzung
$do_not_remember = (boolean) $this->input->post('do_not_remember');
if ($do_not_remember) {
$this->config->set_item('sess_expiration', 0);
$this->config->set_item('sess_expire_on_close', true);
}
$this->load->library('session');