Python + Flask - 从会话中移除键太快

0 投票
2 回答
2289 浏览
提问于 2025-04-18 07:06

我有一个API服务,它可以执行以下操作:

session[parent].pop(child)

但是,当我在浏览器中同时多次调用这个服务时,似乎对Flask(或者Python,或者我也不太确定)来说速度太快了。结果只删除了一个“子项”。我尝试使用

del session[parent][child]

但问题依然存在。我可以在我的API服务中获取一个值的列表来解决这个问题,但我想弄明白为什么会发生这种情况。

我不知道这是不是Flask的问题,Python的问题,还是“网页相关”的问题……

2 个回答

-1

每次你修改会话的时候,只需要设置一下 session.modified = True。这样做是告诉 Flask 在请求结束后要更新会话。

4

这是一个关于“网页内容”的问题。

发生的情况是,浏览器会保存它最后收到的版本。但是如果它收到的响应顺序不对,或者你在请求完成之前就取消了请求,浏览器就不会保存那个版本。

Flask会把session的数据完全存储在一个cookie里。除了用来加密和解密内容的服务器端秘密,服务器上没有其他任何存储。

带有这个cookie的响应会发送到浏览器,浏览器会保存这个cookie。对浏览器来说,这是一段完全不透明的数据,它无法对其进行任何操作,因为它是经过压缩和加密签名的。

然后,每次发起请求时,浏览器都会把这个cookie原封不动地发送回Flask服务器。如果这个请求的响应包含了一个新的cookie版本,那么这个新cookie就会被存储在浏览器的cookie存储中。任何在存储新cookie后发起的新请求都会使用这个新cookie。

但是,如果你在响应还没有完全处理完之前就开始了一个请求,或者没有完成对响应的处理,那么就可能会使用一个旧的cookie,服务器会解码这个旧版本,导致一些更改没有被应用。

撰写回答