flask-login 设置session过期时间(2021年5月20日-亲测)

在使用Flask框架进行web开发时,登录模块采用了flask-login插件,遇到了设置session过期时间的问题,网上查到如下办法,经过测试后并未生效(原因不详):

from flask import session
from datetime import timedelta

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')

    username = request.form['username']
    password = request.form['password']
    user = User.get_user(username, password)
    if not user:
        flash('Username or Password is invalid.', 'error')
        return redirect(url_for('.login'))
    login_user(user)
    
    # 设置session过期时间
    session.permanent = True
    app.permanent_session_lifetime = timedelta(minutes=10)
    
    return render_template('index.html')

于是看了Flask的源码,进行了如下配置,得以解决,代码配置如下:

import flask_login
import json
import datetime
from flask import Flask
from flask import request
from flask_cors import CORS
# from flask_log_request_id import RequestID, current_request_id

app = Flask(__name__)

# 设置session过期时间
app.config['PERMANENT_SESSION_LIFETIME'] = datetime.timedelta(minutes=1)

# 解决跨域问题
CORS(app, resources=r'/*')

源码摘录如下,能力不足,未仔细研究,不做详细解释,惭愧:

class ConfigAttribute(object):
    """Makes an attribute forward to the config"""

    def __init__(self, name, get_converter=None):
        self.__name__ = name
        self.get_converter = get_converter

    def __get__(self, obj, type=None):
        if obj is None:
            return self
        rv = obj.config[self.__name__]
        if self.get_converter is not None:
            rv = self.get_converter(rv)
        return rv

    def __set__(self, obj, value):
        obj.config[self.__name__] = value



#
permanent_session_lifetime = ConfigAttribute(
        "PERMANENT_SESSION_LIFETIME", get_converter=_make_timedelta
    )


#
def _make_timedelta(value):
    if not isinstance(value, timedelta):
        return timedelta(seconds=value)
    return value

猜你喜欢

转载自blog.csdn.net/xuezhangjun0121/article/details/117082002