首页 > 解决方案 > 如何在 Flask 中进行非永久会话

问题描述

我正在学习烧瓶,并试图将一些随机生成的数据与每个会话相关联。我使用此答案中的方法将 session.permanent 设置为 False,但关闭浏览器,然后在返回页面时重新打开它仍然显示相同的代码。

MWE:

from flask import Flask, session
import numpy as np

app = Flask(__name__)
app.secret_key = "supersecretkey"

@app.before_request
def make_session_permanent():
    session.permanent = False

@app.route('/')
def index():
    if 'id' not in session:
        random_id = "".join(np.random.choice(list("abcdefg123"), 16))
        session["id"] = random_id
    return session['id']

if __name__ == '__main__':
    app.run(debug=True)

更新:基于此答案,有人建议使用 socketio 来注意断开连接。这也没有区别,即关闭浏览器,重新打开它,然后转到 127.0.0.1:5000 给出与关闭前相同的数字。使用此更新的 MWE 如下:

from flask import Flask, session
from flask_socketio import SocketIO
import numpy as np

app = Flask(__name__)
app.secret_key = "supersecretkey"

@app.before_request
def make_session_permanent():
    session.permanent = False

@app.route('/')
def index():
    if 'id' not in session:
        random_id = "".join(np.random.choice(list("abcdefg123"), 16))
        session["id"] = random_id
    return session['id']

socketio = SocketIO(app)
@socketio.on('disconnect')
def disconnect_user():
    session.pop('id', None)


if __name__ == '__main__':
    app.run(debug=True)

标签: pythonflask

解决方案


# Instantiate a new web application called `app`, 
# with `__name__` representing the current file
app = Flask(__name__) 

app.config["SESSION_PERMANENT"] = False

推荐阅读