Ich entwickle eine Anwendung und ich möchte dem Benutzer eine Möglichkeit bieten, in für immer signiert bleiben. Wenn er ein Kästchen ankreuzt, sollte seine Sitzung niemals enden, es sei denn, er löscht das Cookie manuell aus oder löscht es. Ist dies nicht der Fall, verfällt sein Sitzungscookie beim Schließen des Browsers.Lassen Sie den Benutzer für immer angemeldet bleiben - Verschiedene Implementierungsmethoden
als ich drei Möglichkeiten, dies zu realisieren, aber alle von ihnen enthalten Vor- und Nachteile:
- ein Cookie mit dem Benutzernamen und sein gehashte Passwort Speichern:
- Pro: Der Benutzer kann mehrere aktive Sitzungen auf verschiedenen Geräten haben.
- Con: Wenn der Cookie von Dritten durchgesickert wird, kann er seine Sitzung jederzeit neu generieren, es sei denn, er ändert sein Passwort.
- Erzeugen eines Token, die in der Datenbank gespeichert und in die Cookies des Benutzers. Dann vergleiche sie:
- Pro: Sobald der Benutzer abmeldet, wird das Token randomisiert und alle seiner Sitzungen werden zerstört. Er wird definitiv eingeloggt sein.
- Con: Der Benutzer kann sich nur für immer mit einem Gerät anmelden. Sobald er sich von einem anderen Gerät anmeldet und akzeptiert, dass er für immer angemeldet ist, wird sein anderer Token überschrieben.
- Nur hypothetisch: Speichern Sie Sitzungen für immer auf dem Server und geben Sie dem Benutzer nicht auslaufende Cookies.
- Con: Dies ist wahrscheinlich nicht realistisch, weil Sie nicht so viele Daten auf effiziente Weise speichern können.
Ich ziehe es zur Zeit den zweiten Weg, weil sie nicht wie die ersten zu sein, wie unsicher scheinen und es ist leicht implementierbar. Aber ich bin immer noch nicht davon überzeugt und ich habe gesehen, dass es bewährte Frameworks gibt, die es anders machen.
Können Sie sich einen anderen Weg vorstellen, der vielleicht noch besser ist? Was ist dein Favorit und warum?
Erstellen mehrere Tokens pro Benutzer scheint eine sehr gute Idee zu sein! Vielen Dank! Dies löst das Problem des unbeabsichtigten Überschreibens des "eindeutigen Tokens". Ich habe es mir in Erinnerung gebracht und bin auf das folgende Problem gestoßen: Wenn es Nutzer gibt, die sich immer für immer anmelden, aber alle ihre Cookies löschen, ohne sich einzuloggen, würden sie die Datenbank irgendwie spammen. Gibt es einen besseren Weg, dies zu verhindern, anstatt alte Sitzungen zu löschen, sobald mehr als X vorhanden sind? Übrigens - mein erster Vorschlag hatte nicht die Absicht, das Passwort des Benutzers in einem Cookie zu speichern: Ich würde eine gehashte und gesalzene Darstellung speichern. – YMMD
Ich würde bei jedem Zugriff auf einen Zeitstempel im Sitzungsspeicher tippen und dann ein Cron-Skript schreiben (oder es als Garbage Collection in Ihre App einbauen), das alle Sitzungen löscht, auf die in X Tagen nicht zugegriffen wurde. Es ist also nur eine unbestimmte Anmeldung, wenn Sie aktiv bleiben. –
Und ja, ich verstand das Hashing. Es spielt keine Rolle, ob es hashed ist. Wenn Ihre App den Zugriff basierend auf einem bereits gehashten Passwort erlaubt, unterscheidet sich das Hash-Passwort nicht von der Vergabe des Klartext-Passworts. –