18

我正在使用 Python Web 框架 Flask。我在我的应用程序中使用会话。对于我的应用程序main,我有设置main.permanent_session_lifetime = timedelta(days=5),以便用户在登录后保持登录状态 5 天。但即使是活动用户也会在 5 天后注销。我希望他们每次访问该站点时都重置到期时间,这样您只有在 5 天不活动后才能注销。大多数网站都以这种方式工作。我如何用 Flask 做到这一点?

4

3 回答 3

25

您可以使用@before_request处理程序在每次请求时更新与客户端的会话。

尝试以下操作:

@app.before_request
def func():
  session.modified = True
于 2013-11-05T17:46:03.527 回答
4

应该足够了:

from datetime import timedelta

# User will be logout after this time of inactivity
PERMANENT_SESSION_LIFETIME = timedelta(minutes=30)
SESSION_REFRESH_EACH_REQUEST = True

https://flask.palletsprojects.com/en/1.1.x/config/

于 2019-09-05T10:18:44.070 回答
0
  1. 获取 cookie 令牌request
    auth_token = request.cookies.get('jwt')
  1. 在响应 cookie 中设置令牌max_age。因此,max_age每个请求活动都会向前推进。如果用户端没有活动,则 cookie 将按时过期。

     response.set_cookie(key="jwt",
                        value=auth_token,
                        max_age=IN_SECONDS,
                        httponly=True,
                        samesite="Strict",
                        )
    

我为自己做了如下:

我已经在每个 API 调用上有一个 token_rquired_decorator。所以我把我的逻辑放在make_response函数中。

def token_required(f):
    @wraps(f)
    def decorated(*args, **kwargs):

        # some_code here 
        _response, status_code = f(*args, **kwargs)
        return make_response(_response, auth_token, status_code)

    return decorated

make_response功能上。我再次设置了一个 cookie,最终将我的 cookie 到期时间向前移动,每个请求都被视为活动。

 def make_response(_response: Dict[str, Any], auth_token: str, status_code: int):
    response = Response(
        json.dumps(_response).encode('utf-8'),
        status=status_code,
        mimetype="application/json"
    )
    response.set_cookie(key="jwt",
                        value=auth_token,
                        max_age=Config.COOKIE_MAX_AGE,
                        httponly=True,
                        samesite="Strict",
                        )
    return response

我希望它对社区有所帮助。不要忘记欣赏它。谢谢

于 2020-09-28T11:34:29.413 回答