我有一个 Flask 应用程序,它使用 Flask-Session 在作为 Kubernetes 部署运行的几个容器之间的 Redis 中存储会话数据。这一切都工作正常,但我最近开始仔细观察 Redis 数据库,发现它的键比我预期的要多远,而且我的应用程序的准备情况和指标端点(经常轮询)似乎正在创建一个每次都有新的会话。
有没有办法从会话创建过程中排除特定的 Flask 视图?例如像 @flask.nosession 视图装饰器之类的东西是理想的选择,或者只强制那些会话的生命周期短得多?
最简单的方法是让 Cookie 每 48 小时左右过期一次。虽然这不能回答你的问题,但我会做出更深入的回答。
根据我的理解,您希望某些页面不创建新会话。由于没有内置的装饰器提供此功能,因此您可以自己制作一个(或我自己,哈哈)。
from functools import wraps
from flask import session
def nosession_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
session.permanent = False
return f(*args, **kwargs)
return decorated_function
# Example usage:
@app.route('/no-session')
@nosession_required
def no_session_view():
return 'No session created'
@app.route('/normal-session')
def normal_session_view():
return 'Usual behavior (created session)'
这是另一种方法,虽然它不使用装饰器,但如果出现另一个问题,它可以作为替代方案。
只需要烧瓶。
from flask import Flask, session
您可以修改创建会话之前发生的情况。
@app.before_request
def before_request():
if 'exclude_session' in session:
session.permanent = False # Set session to non-permanent
else:
session.permanent = True # Set session to permanent (default behavior)
最后,您可以简单地在您的路线中使用这些。
# Example view with excluded session creation
@app.route('/no-session')
def no_session_view():
session['exclude_session'] = True # Mark this view to exclude session creation
return 'No session was created.'
# Example view with default session behavior
@app.route('/normal-session')
def normal_session_view():
return 'Session created.'