Pracuję nad witryną, która wymaga od nas zalogowania użytkownika po N minutach bezczynności. Czy są jakieś najlepsze praktyki do tego przy użyciu Django?Wylogowywanie użytkowników z witryny Django po N minutach bezczynności
Odpowiedz
Spójrz na session middleware i jego ustawień. W szczególności te dwie:
SESSION_COOKIE_AGE
domyślne: 1209600 (2 tygodnie, w ciągu kilku sekund)
Wiek sesyjne, w sekund.
SESSION_SAVE_EVERY_REQUEST
domyślna: Fałsz
czy zapisać dane sesji na każde żądanie. Jeśli jest to wartość false (domyślnie), dane sesji będą zapisywane tylko, jeśli zostały zmodyfikowane - to znaczy, jeśli którakolwiek z jej wartości słownika została przypisana lub usunięta.
Ustawienie niskiego poziomu SESSION_COOKIE_AGE
i włączenie SESSION_SAVE_EVERY_REQUEST
powinno spowodować "wyślizgiwanie się" wygasania.
Spróbuj ustawić ustawienia.SESSION_COOKIE_AGE na N * 60 sekund.
http://docs.djangoproject.com/en/dev/ref/settings/#session-cookie-age
Ustawienie wieku ciasteczek sesji w oprogramowaniu pośredniczącym sesji django powoduje ustawienie czasu wygaśnięcia w nagłówku set-cookie przekazywanym do przeglądarki. Jest to tylko zgodność przeglądarki z czasem wygaśnięcia, który wymusza "wylogowanie".
W zależności od przyczyn potrzeby bezczynnego wylogowania użytkownik może nie uznać wystarczająco dobrze zgodności przeglądarki z czasem wygaśnięcia. W takim przypadku musisz rozszerzyć oprogramowanie pośrednie sesji, aby to zrobić.
Na przykład możesz przechowywać czas wygaśnięcia w silniku sesji, który aktualizujesz z zapytaniami. W zależności od rodzaju ruchu w Twojej witrynie, możesz chcieć tylko napisać z powrotem do obiektu sesji raz w X sekund, aby uniknąć nadmiernego zapisu danych w db.
To nie wydaje się być prawdą w Django 1.4. Nagłówek Set-Cookie, który otrzymuję z serwera, wygląda następująco: 'Set-Cookie = csrftoken = ... sessionid = 365ede0dd7038cc70796f9f724bc21b6; httponly; Ścieżka =/'Nie ma czasu wygaśnięcia, więc wygaśnięcie musi być wymuszone po stronie serwera. – Nathan
Miło, że oprogramowanie pośrednie sesji zostało ulepszone. Nie jestem pewien, co powinienem zrobić z tą odpowiedzią, która była wtedy dokładna. – MattH
Myślę, że dobrze jest pozostawić odpowiedź tak, jak jest, ponieważ była prawidłowa w momencie pisania. – Nathan
Dzięki McNearney. dzisiaj rozwiązałem Mój problem za pomocą Twojego posta. –