我正在使用Python Web框架Flask。我在我的应用中使用会话。对于我的名为main
的应用,我已经设置了main.permanent_session_lifetime = timedelta(days=5)
,因此用户在登录后将保持登录状态5天。但即使是活跃用户也会在5之后注销天。我希望每次访问网站时都会重置到期时间,因此只有在不活动<5天后才会退出。大多数网站以这种方式工作我如何使用Flask做到这一点?
答案 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
答案 2 :(得分:0)
request
获取cookie令牌 auth_token = request.cookies.get('jwt')
使用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
我希望它将对社区有所帮助。别忘了欣赏它。谢谢