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

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 день.

Codegeek
источник
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