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


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.