是否有一种简单的方法可以在烧瓶中使会话超时?

ver*_*hio 72 python session timeout flask

我正在建立一个带烧瓶的网站,用户可以在其中登录帐户.我正在使用flask-principal进行部分登录和角色管理.有没有办法让用户的会话在说5分钟或10分钟后过期?我无法在烧瓶文档或flask-principal的文档中找到它.

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

cod*_*eek 103

除非您有永久会话,否则在关闭浏览器后,会话会话到期.您可以尝试以下方法:

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)
Run Code Online (Sandbox Code Playgroud)

默认情况下,在Flask中,permanent_session_lifetime设置为31天.

  • 我相信如果您更改`app.secret_key`并重新启动服务器,您的会话将被重置. (14认同)
  • session.permanent默认为False:http://flask.pocoo.org/docs/api/#flask.session.permanent (14认同)
  • 在这里使用`before_request`而不是`before_first_request`的原因是什么? (4认同)
  • 这工作完美!关于会话过期时如何闪烁消息有什么建议吗? (2认同)

tin*_*are 16

是的,我们应该设定

session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=5)
Run Code Online (Sandbox Code Playgroud)

但我不认为应该在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)
Run Code Online (Sandbox Code Playgroud)

会议将为每个客户端创建,来自其他客户端分隔.所以,我认为设置session.permanent的最佳位置是当你"登录()"时:

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