Python + Flask - 从会话中移除键太快
我有一个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,服务器会解码这个旧版本,导致一些更改没有被应用。