python - 如何在 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)
解决方案
# Instantiate a new web application called `app`,
# with `__name__` representing the current file
app = Flask(__name__)
app.config["SESSION_PERMANENT"] = False
推荐阅读
- c# - 从后面的代码与客户端调用外部 Web 服务
- flutter - 为什么 TextEditingController 总是在有状态的小部件中使用?
- css - 如何在 LESS 中更好地使用带有 mixin 的媒体查询?
- reporting-services - SSRS 2017 报告加载非常缓慢
- javascript - 缓冲连接映射输入
- asp.net-core - 从 .net core 3.0 迁移到 3.1 导致缺少 System.Data.SqlClient 程序集错误
- doctrine-orm - 如何根据 Doctrine 中的 Repository / Criteria 获取查询?
- java - 使用java通过microsoft graph访问office 365 planner
- python - 如何使用 Youtube api 将整个文件夹上传到 Youtube
- python - 如何对类别进行分页