Python + Flask - 从会话中删除密钥太快

时间:2014-05-20 15:20:02

标签: python api session flask

我有和API服务这样做:

session[parent].pop(child)

但是,当我在浏览器中多次调用此服务时,对于Flask(或Python,或者我不知道)来说这似乎太快了。只有一个孩子'已移除。我试着用

del session[parent][child]

但问题是一样的。我可以在我的API服务中获取一个值列表来解决这个问题,但是,我想了解为什么会发生这种情况。

我不知道这是一个Flask问题,一个Python问题,一个' Web Stuff'问题...

2 个答案:

答案 0 :(得分:4)

这是一个'Web Stuff'问题。

浏览器会存储收到的最新版本。但如果它收到无序响应,或者您在请求完成之前中止请求,则浏览器将不会存储该版本。

Flask将session的数据完全存储在Cookie中。除了用于加密和解密内容的服务器端密钥之外,服务器端没有任何内容存储。

将具有该cookie的响应发送到浏览器,并且浏览器存储cookie。这对浏览器来说是一个完全不透明的数据,因为它是压缩和加密签名的,所以无法对它做任何事情。

每次发出请求时,浏览器都会将该 的cookie发送回Flask服务器。如果对该请求的响应包含新版本的cookie,那么它将存储在浏览器cookie存储中。存储后启动的任何新请求将使用新的cookie。

但是,如果在响应完全处理之前启动请求,或者没有完成处理响应,则可以使用较旧的cookie,并且您的服务器会使用更改来解码旧版本没有。

答案 1 :(得分:-1)

每次修改会话时都设置session.modified = True。 这告诉烧瓶在请求后更新会话。