Gibt es eine Möglichkeit, das Verhalten von SESSION_EXPIRE_AT_BROWSER_CLOSE und SESSION_COOKIE_AGE zu kombinieren?

8

Aus Sicherheitsgründen setze ich SESSION_EXPIRE_AT_BROWSER_CLOSE auf true.

>

Aber Browser-Length-Cookies (Cookies, die ablaufen, sobald der Nutzer seinen Browser schließt) haben keine Ablaufzeit, dann SESSION_COOKIE_AGE hat keine Auswirkungen (Ja, ich überprüfe es). Aber ich möchte eine Abmeldung / Timeout bei Inaktivität plus abmelden beim Schließen einstellen.

Meine Frage ist: Was ist der beste Weg, um das Inaktivitäts-Timeout / Logout in Browser-Length-Cookies zu implementieren?

    
danihp 13.02.2012, 21:02
quelle

1 Antwort

16

Wie Sie erklären, sind SESSION_EXPIRE_AT_BROWSER_CLOSE und SESSION_COOKIE_AGE nicht kompatibel. Wenn Sie ein Ablaufdatum für einen Cookie festlegen, wird dieser Cookie kein Browser-Dauer-Cookie.

Um Ihr gewünschtes Verhalten zu erreichen, sollten Sie .

Ein eleganter Weg, um die Ablaufzeit von Hand zu kontrollieren, ist:

  1. Erstellen Sie eine neue benutzerdefinierte Middleware , die die Zeitüberschreitung steuert.
  2. Ändern Sie settings.py, um Ihre benutzerdefinierte Middleware (und Sitzungen) zu aktivieren.

Die timeout benutzerdefinierte Middleware kann wie folgt aussehen:

%Vor%

Denken Sie daran, Sitzungen zu aktivieren, um lastRequest zu speichern.

Diese Lösung wurde von mir geschrieben und getestet und funktioniert jetzt auf meiner Site. Dieser Code hat GNU-Lizenz;)

Neu bei django 1.6 (... zwei Jahre später ...)

Datetime- und Timedelta-Werte sind nur serialisierbar, wenn Sie das PickleSerializer . Wenn nicht, ist die einfachste Lösung datetime in Unix-Zeitstempel übersetzen und zurück . Unter dieser Übersetzung können Sie frei posten.

Bearbeitet

Die App django-session-security bietet einen Mechanismus, um inaktive authentifizierte Benutzer abzumelden. Schau es dir an.

    
danihp 15.02.2012, 08:54
quelle

Tags und Links