Есть ли простой способ сделать тайм-аут сеанса во флаконе?


85

Я создаю веб-сайт с помощью Flask, где пользователи имеют учетные записи и могут входить в систему. Я использую flask-Principal для частичного ведения журнала и управления ролями. Есть ли способ заставить сеанс пользователя истечь, скажем, через 5 или 10 минут? Мне не удалось найти это в документации по фляжке или в документации по фляжке.

Я придумал, как сделать это вручную, установив переменную на стороне сервера с меткой времени в момент входа в систему, и при следующем действии, которое выполняет пользователь, сервер проверяет временную дельту на этой метке времени и удаляет сеанс.


Вы хотите, чтобы пользовательский сеанс истекал через 5 или 10 минут бездействия или просто истекал независимо от уровня активности?
codecool 03

из-за бездействия мне придется это реализовать. просто истекает при закрытии браузера или через 24 часа. Он не истекает прямо сейчас.
Verrochio

3
Чтобы истек срок действия сеанса относительно активности: stackoverflow.com/questions/19760486/…
zengr

Ответы:


125

Сеансы 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 для параметра constant_session_lifetime установлено значение 31 день.


14
Я верю, что ваш сеанс будет сброшен, если вы измените его app.secret_keyи перезапустите сервер.
Джон

16
session.permanent по умолчанию имеет значение False: flask.pocoo.org/docs/api/#flask.session.permanent
Randy Syring

1
Вы знаете, что вызывается, когда истекает постоянная_сессия_жизни?
ramu

5
В чем причина использования before_requestздесь вместо before_first_request?
srctaha

1
@srctaha Я думаю, может быть, он хочет обновлять истечение срока каждый раз, когда люди заходят на сайт
Танки Ву

26

Да, мы должны установить

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/… у меня не сработала.
Кайл Брайденстайн

1
Обновите ссылку в ответе на последнюю версию:
Основная

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