Чи є простий спосіб зробити тайм-аут сеансів у колбі?


83

Я будую веб-сайт із колбою, де користувачі мають облікові записи та можуть входити. Я використовую flask-principal для часткової реєстрації та управління ролями. Чи є спосіб зробити так, щоб сеанс користувача закінчився, скажімо, через 5 хвилин або 10 хвилин? Мені не вдалося знайти це в документації колби або в документації головного колби.

Я продумав спосіб зробити це вручну, встановити змінну на стороні сервера з міткою часу під час входу в систему, і при наступній дії користувача сервер перевіряє дельту часу на цій мітці часу та видаляє сеанс.


Ви хочете закінчити сеанс користувача після бездіяльності 5 або 10 хвилин або просто закінчити незалежно від рівня активності?
codecool

для бездіяльності мені доведеться це реалізувати. просто закінчиться, коли браузер закритий, або 24 години. Він не втрачає чинність зараз.
verrochio

3
Для того, щоб зробити сесію закінчуються щодо діяльності: stackoverflow.com/questions/19760486 / ...
zengr

Відповіді:


122

flask-сесії закінчуються після закриття браузера, якщо у вас немає постійного сеансу. Ви можете спробувати наступне:

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)

За замовчуванням у Flask для параметра permanent_session_lifetime встановлено 31 день.


14
Я також вважаю, що це правда, що ваш сеанс буде скинуто, якщо ви зміните свій app.secret_keyі перезапустите сервер.
Джон

16
session.permanent за замовчуванням хибний
Randy

1
Чи знаєте ви, що викликається, коли закінчується trajni_session_lifetime?
раму

4
У чому причина використання before_requestтут замість before_first_request?
srctaha

1
@srctaha Я думаю, можливо, він хоче оновити термін дії щоразу, коли люди відвідують сайт
Tanky Woo

25

Так, ми повинні встановити

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

Але я не думаю, що це повинно бути встановлено на app.before_request, Це призведе до того, що встановити їх теж можуть часом.

permanent_session_lifetimeЄ конфігурацією основи , тому він повинен бути встановлений в настройках програми:

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

Заповіт session, створений для кожного клієнта, відокремлений від інших клієнтів. Отже, я вважаю, що найкраще встановити session.permanentце, коли ви login():

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

Для Apache-Airflow (який використовує Flask) встановлення цього в github.com/apache/incubator-airflow/blob/master/airflow/contrib/… мені не вдалося.
Kyle Bridenstine

1
Оновіть посилання у відповіді до останньої версії: Основи конфігурації
Wavesailor

Я використовую сеанс колби з кімнатами, трансляцією тощо, наведене вище рішення, однак мені не вдалося. Я би очікував, що через 5 хвилин користувач безпосередньо вийде з системи та перенаправиться на сторінку входу .... це можливо при постійному сеансі? або мені потрібно досягти цього за допомогою db та збереження дати входу?
sqp_125
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.