Czy istnieje sposób na połączenie zachowania wygasania sesji przy zamknięciu przeglądarki i wieku cookie sesji
Ze względów bezpieczeństwa ustawiłem SESSION_EXPIRE_AT_BROWSER_CLOSE na true.
Ale Pliki cookie o długości przeglądarki (pliki cookie, które wygasają, gdy użytkownik zamknie przeglądarkę) nie wygasają, wtedy SESSION_COOKIE_AGE nie ma żadnych efektów (tak, sprawdzam). Ale chcę ustawić wylogowanie / timeout na nieaktywności plus wylogować się przy zamykaniu przeglądania.
Moje pytanie brzmi: jak najlepiej wdrożyć limit czasu braku aktywności/wylogowania w plikach cookie o długości przeglądarki scenariusz?
1 answers
Jak wyjaśniasz, SESSION_EXPIRE_AT_BROWSER_CLOSE i SESSION_COOKIE_AGE nie są kompatybilne. Gdy ustawisz datę wygaśnięcia na plik cookie, ten plik cookie nie staje się plikiem cookie o długości przeglądarki.
Następnie, aby osiągnąć pożądane zachowanie, należy ustawić SESSION_EXPIRE_AT_BROWSER_CLOSE jako True i kontrolować limit czasu wygaśnięcia ręcznie.
Eleganckim sposobem na ręczne kontrolowanie limitu czasu to:
- Utwórz nową custom middleware, która kontroluje przerwa.
- Modyfikuj settings.py aby włączyć własne oprogramowanie pośrednie (i sesje).
Timeout custom middleware może wyglądać następująco:
class timeOutMiddleware(object):
def process_request(self, request):
if request.user.is_authenticated():
if 'lastRequest' in request.session:
elapsedTime = datetime.datetime.now() - \
request.session['lastRequest']
if elapsedTime.seconds > 15*60:
del request.session['lastRequest']
logout(request)
request.session['lastRequest'] = datetime.datetime.now()
else:
if 'lastRequest' in request.session:
del request.session['lastRequest']
return None
Zapamiętaj włącz sesje w celu przechowywania lastRequest
.
To rozwiązanie jest napisane i przetestowane be me I teraz działa na mojej stronie. Ten kod ma licencję GNU;)
Nowość na django 1.6 (... dwa lata później ... )
Wartości Datetime i timedelta można serializować tylko wtedy, gdy za pomocą ogórków kiszonych (PickleSerializer) ([13]). Jeśli nie, być może łatwym rozwiązaniem jest translate datetime to unix timestamp and back . Be free to post below this translation.
Edytowane
Aplikacja Django-session-security dostarcza mechanizm do wylogowania nieaktywnych uwierzytelnionych użytkowników. Spójrz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:26