有没有一种简单的方法可以使烧瓶超时?


83

我正在建立一个带有flask的网站,其中用户具有帐户并能够登录。我正在使用flask-principal作为登录部分和角色管理。有没有办法让用户的会话在5分钟或10分钟后过期?我在flask文档或flask-principal文档中找不到该文件。

我想到了一种手动方法,在登录时在服务器端设置一个带有时间标签的变量,并在用户执行下一个操作时,服务器会验证该时间戳记上的时间增量并删除会话。


您是要在闲置5或10分钟后使用户会话过期,还是只是不考虑活动级别而过期?
codecool 2012年

对于不活动,我将必须执行。只是在关闭浏览器或24小时后过期。它现在根本不会过期。
verrochio 2012年

3
:为了使会话过期相对于活动stackoverflow.com/questions/19760486/...
zengr

Answers:


122

烧瓶会话一旦关闭浏览器就会过期,除非您有一个永久会话。您可以尝试以下方法:

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并重新启动服务器,会话也将重置。
约翰


1
你知道当permanent_session_lifetime到期时会调用什么吗?
ramu 2015年

4
使用before_request此处而不是原因是什么before_first_request
srctaha

1
@srctaha我想也许他想刷新期满每个时代的人访问的网站
Tanky佑

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/中设置此设置对我不起作用。
凯尔·布​​莱恩斯汀

1
将答案中的链接更新为最新版本:基本配置
Wavesailor,

我使用烧瓶会话与房间和广播等解决方案,但是对我不起作用。我希望5分钟后,用户可以直接注销并重定向到登录页面.....对于永久会话,这可能吗?还是必须使用db并存储登录日期来实现?
sqp_125
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.