我正在使用 Python Web 框架 Flask。我在我的应用程序中使用会话。对于我的应用程序main
,我有设置main.permanent_session_lifetime = timedelta(days=5)
,以便用户在登录后保持登录状态 5 天。但即使是活动用户也会在 5 天后注销。我希望他们每次访问该站点时都重置到期时间,这样您只有在 5 天不活动后才能注销。大多数网站都以这种方式工作。我如何用 Flask 做到这一点?
问问题
13446 次
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
于 2019-09-05T10:18:44.070 回答
0
- 获取 cookie 令牌
request
auth_token = request.cookies.get('jwt')
在响应 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 回答