【问题标题】:Flask session lost data烧瓶会话丢失数据
【发布时间】:2020-05-24 02:54:46
【问题描述】:

我正在测试一个简单的应用程序来在会话中存储数据。我创建了检查以避免重置,但仍然丢失数据。这是我的 app.py 代码:

from flask import Flask,render_template,request,session
from flask_session import Session

app = Flask(__name__)

app.config["SESSION_PERMANENT"] = True
app.config["SESSION_TYPE"] = "filesystem"
Session(app)

@app.route("/",methods=["POST","GET"])
def index():
    if session.get("notes") is None:
        session["notes"] = []
    if request.method == "POST":
        note = request.form.get("note")
        session["notes"].append(note)
    return render_template("notes.html",notes=session["notes"])

================================================ =================

每当我从表单发布新信息时,它都会覆盖旧信息。似乎会话已重置。

知道为什么会这样吗?

谢谢, 瓦尔丹

【问题讨论】:

  • 基本上,会话每个键只存储一个项目,所以如果你更新键,它之前的值将被覆盖。
  • 但我将附加到注释键附加注释的列表值。 notes 是一个键,它的值是一个列表。所以,我可以在该列表中追加一个新项目:session["notes"].append(note)。

标签: flask


【解决方案1】:

请考虑以下几点:

  1. 这是最重要的一点,要让烧瓶会话工作,您需要配置一个SECRET_KEY,如下所示:
app.config["SECRET_KEY"] = 'YourSecretKey@123'
  1. 我不知道,我只是想通了你不需要下面这行,它是相应的导入(当我注释掉这部分时它开始为我工作,可能是 Flask-Session 和 Flask 的内置会话是互相捣乱):
Session(app)
from flask_session import Session
  1. 不要直接更新会话,如果是数组,按如下操作:
note = request.form.get("note")
temp = session['notes']
temp.append(note)
session['notes'] = temp

希望对你有用。

【讨论】:

  • 感谢 ngShravil.py,这对我有用。但我无法理解真正的原因是什么。并且需要进行两项更改:删除 Session(app) 并添加 SECURE_KEY + add temp 以更新会话。我只是想知道,因为在 edx 课程中它表明它是这样工作的。也许个人和公司笔记本电脑上的 cookie 管理不同?
  • 我很高兴这个答案对您的会话问题有所帮助。我不认为,个人和公司笔记本电脑上的 cookie 管理不同,它必须相同。但是,公司的笔记本电脑可能会在默认情况下使用防火墙阻止 cookie 和代理。但是,它超出了 OP 的范围。
  • 完成。是的,可能是防火墙阻止了 cookie。谢谢!
猜你喜欢
  • 2016-12-01
  • 2018-08-18
  • 2019-03-14
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 2014-12-05
相关资源
最近更新 更多