Czy istnieje łatwy sposób na przekroczenie limitu czasu sesji w kolbie?


85

Tworzę stronę internetową z flaskiem, na której użytkownicy mają konta i mogą się zalogować. Używam flask-Principal do częściowego logowania i zarządzania rolami. Czy istnieje sposób na wygaśnięcie sesji użytkownika po powiedzmy 5 lub 10 minutach? Nie mogłem tego znaleźć w dokumentacji kolby ani w dokumentacji dyrektora kolby.

Pomyślałem o tym, jak zrobić to ręcznie, ustawić zmienną po stronie serwera ze znacznikiem czasu w momencie logowania, a przy następnej akcji użytkownika serwer weryfikuje deltę czasu na tym znaczniku czasowym i usuwa sesję.


Czy chcesz wygasać sesję użytkownika po 5 lub 10 minutach bezczynności, czy po prostu wygasnąć niezależnie od poziomu aktywności?
codecool

w przypadku braku aktywności będę musiał to zaimplementować. po prostu wygasnąć po zamknięciu przeglądarki lub 24 godziny. W tej chwili w ogóle nie wygasa.
verrochio

3
Aby sesja wygasła w stosunku do aktywności: stackoverflow.com/questions/19760486/ ...
zengr

Odpowiedzi:


125

sesje flask wygasają po zamknięciu przeglądarki, chyba że masz sesję stałą. Możesz spróbować następujących rzeczy:

from datetime import timedelta
from flask import session, app

@app.before_request
def make_session_permanent():
    session.permanent = True
    app.permanent_session_lifetime = timedelta(minutes=5)

Domyślnie w Flasku permanent_session_lifetime jest ustawione na 31 dni.


14
Uważam, że prawdą jest również, że twoja sesja zostanie zresetowana, jeśli zmienisz swój app.secret_keyi zrestartujesz serwer.
John

16
session.permanent domyślnie jest False: flask.pocoo.org/docs/api/#flask.session.permanent
Randy

1
Czy wiesz, co jest wywoływane po wygaśnięciu permanent_session_lifetime?
ramu

5
Jaki jest powód używania before_requesttutaj zamiast before_first_request?
srctaha

1
@srctaha Myślę, że może chciałby odświeżyć datę ważności za każdym razem, gdy ludzie odwiedzają witrynę
Tanky Woo

26

Tak, powinniśmy ustawić

session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=5)

Ale nie sądzę, że powinno to być ustawione na. app.before_requestTo doprowadzi do ich ustawienia wiele razy.

Jest permanent_session_lifetimeto konfiguracja podstawowa , więc należy ją ustawić podczas konfigurowania aplikacji:

 from datetime import timedelta
 app = Flask(__name__)
 app.config['SECRET_KEY'] = 'xxxxxxxxx'
 app.config['PERMANENT_SESSION_LIFETIME'] =  timedelta(minutes=5)

sessionWola stworzony dla każdego klienta, oddzielone od innych klientów. Myślę więc, że najlepszym miejscem do ustawienia session.permanentjest login():

@app.route('/login', methods=['GET', 'POST'])
def login():
    #After Verify the validity of username and password
    session.permanent = True

W przypadku Apache-Airflow (który używa Flask) ustawienie tego na github.com/apache/incubator-airflow/blob/master/airflow/contrib/… nie działało dla mnie.
Kyle Bridenstine,

1
Zaktualizuj link w odpowiedzi do najnowszej wersji: Konfiguracja podstawowa
Wavesailor

Używam sesji kolbowej z pokojami i nadawaniem itp. Powyższe rozwiązanie jednak nie działa dla mnie. Spodziewałbym się, że po 5 minutach użytkownik zostanie bezpośrednio wylogowany i przekierowany do strony logowania… czy jest to możliwe przy stałej sesji? lub Czy muszę to osiągnąć używając db i zapamiętując datę logowania?
sqp_125,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.