从会话创建中排除 Flask 视图?

问题描述 投票:0回答:1

我有一个 Flask 应用程序,它使用 Flask-Session 在作为 Kubernetes 部署运行的几个容器之间的 Redis 中存储会话数据。这一切都工作正常,但我最近开始仔细观察 Redis 数据库,发现它的键比我预期的要多,而且我的应用程序的准备情况和指标端点(经常轮询)似乎正在创建一个每次都有新的会话。

有没有办法从会话创建过程中排除特定的 Flask 视图?例如像 @flask.nosession 视图装饰器之类的东西是理想的选择,或者只强制那些会话的生命周期短得多?

python flask prometheus
1个回答
0
投票

最简单的方法是让 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.'
© www.soinside.com 2019 - 2024. All rights reserved.