Gibt es eine einfache Möglichkeit, das Zeitlimit für Sitzungen in der Flasche festzulegen?

82

Ich erstelle eine Website mit Flasche, auf der Benutzer Konten haben und sich anmelden können. Ich verwende Flask-Principal für die Anmeldung und das Rollenmanagement. Gibt es eine Möglichkeit, die Sitzung des Benutzers nach etwa 5 oder 10 Minuten ablaufen zu lassen? Ich konnte das nicht in der Kolbendokumentation oder in der Dokumentation des Kolbenleiters finden.

Ich dachte über eine Möglichkeit nach, dies von Hand zu tun, eine variable serverseitige mit einem Zeit-Tag zum Zeitpunkt der Anmeldung festzulegen und bei der nächsten Aktion, die der Benutzer ausführt, überprüft der Server das Zeitdelta auf diesem Zeitstempel und löscht die Sitzung.

verrochio
quelle
Möchten Sie die Benutzersitzung nach einer Inaktivität von 5 oder 10 Minuten ablaufen lassen oder einfach unabhängig von der Aktivitätsstufe ablaufen?
Codecool
Für Inaktivität muss ich das implementieren. Nur um zu verfallen, wenn der Browser geschlossen ist oder 24 Stunden. Es läuft momentan überhaupt nicht ab.
Verrochio
3
Um eine Sitzung relativ zur Aktivität ablaufen zu lassen: stackoverflow.com/questions/19760486/…
zengr

Antworten:

122

Flask-Sitzungen laufen ab, sobald Sie den Browser schließen, es sei denn, Sie haben eine permanente Sitzung. Sie können möglicherweise Folgendes versuchen:

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)

In Flask ist permanent_session_lifetime standardmäßig auf 31 Tage festgelegt.

Codegeek
quelle
14
Ich glaube, es ist auch wahr, dass Ihre Sitzung zurückgesetzt wird, wenn Sie Ihre ändern app.secret_keyund den Server neu starten.
John
16
session.permanent ist standardmäßig False: flask.pocoo.org/docs/api/#flask.session.permanent
Randy Syring
1
Wissen Sie, wie aufgerufen wird, wenn die permanent_session_lifetime abläuft?
Ramu
4
Was ist der Grund, before_requesthier statt zu verwenden before_first_request?
Srctaha
1
@srctaha Ich denke, vielleicht möchte er die Ablaufdaten jedes Mal
aktualisieren,
25

Ja, wir sollten einstellen

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

Aber ich denke nicht, dass es eingestellt werden sollte app.before_request. Dies wird dazu führen, dass sie auch mal eingestellt werden.

Das permanent_session_lifetimeist eine Grundlagen - Konfiguration , so sollte es eingestellt werden , bei der Konfiguration des App:

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

Das sessionTestament wird für jeden Kunden erstellt und von anderen Kunden getrennt. Ich denke, der beste Ort zum Einstellen session.permanentist, wenn Sie login():

@app.route('/login', methods=['GET', 'POST'])
def login():
    #After Verify the validity of username and password
    session.permanent = True
Winzling
quelle
Für Apache-Airflow (der Flask verwendet) hat die Einstellung in github.com/apache/incubator-airflow/blob/master/airflow/contrib/… bei mir nicht funktioniert.
Kyle Bridenstine
1
Aktualisieren Sie den Link in der Antwort auf die neueste Version: Grundlagen Konfiguration
Wavesailor
Ich benutze eine Flaschensitzung mit Räumen und Rundfunk usw. über der Lösung, funktionierte jedoch nicht für mich. Ich würde erwarten, dass der Benutzer nach 5 Minuten direkt abgemeldet und zur Anmeldeseite umgeleitet wird. Ist dies mit einer permanenten Sitzung möglich? oder Muss ich dies mit db erreichen und das Anmeldedatum speichern?
sqp_125