重置Flask中cookie的到期时间

时间:2013-11-04 01:45:35

标签: python session flask

我正在使用Python Web框架Flask。我在我的应用中使用会话。对于我的名为main的应用,我已经设置了main.permanent_session_lifetime = timedelta(days=5),因此用户在登录后将保持登录状态5天。但即使是活跃用户也会在5之后注销天。我希望每次访问网站时都会重置到期时间,因此只有在不活动<5天后才会退出。大多数网站以这种方式工作我如何使用Flask做到这一点?

3 个答案:

答案 0 :(得分:18)

您可以使用@before_request处理程序在每次请求时将会话续订到客户端。

尝试以下方法:

@app.before_request
def func():
  session.modified = True

答案 1 :(得分:1)

应该足够:

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/

答案 2 :(得分:0)

  1. request获取cookie令牌
    auth_token = request.cookies.get('jwt')
  1. 使用max_age在响应cookie中重新设置令牌。结果,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

我希望它将对社区有所帮助。别忘了欣赏它。谢谢