【问题标题】:Python + Flask - Removing key from session too fastPython + Flask - 从会话中删除密钥太快
【发布时间】:2014-07-08 22:57:12
【问题描述】:

我有和 API 服务可以做到这一点:

session[parent].pop(child)

但是,当我在浏览器中同时调用该服务不止一次时,这对于 Flask(或 Python,或者我不知道)来说似乎太快了。只删除了一个“孩子”。我尝试使用

del session[parent][child]

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

我不知道是 Flask 问题、Python 问题还是“Web Stuff”问题……

【问题讨论】:

  • 没有足够的信息来回答这个问题。 session 到底是什么,它是如何在请求中持续存在的?你是如何处理并发和锁定的?
  • 丹尼尔,浏览器会话。除非 Flask 默认设置和获取浏览器会话,否则我什么都不做。
  • @DanielRoseman:这是关于flask.session;给定标签,这对我来说是完全清楚的。

标签: python api session flask


【解决方案1】:

这是一个“Web Stuff”问题。

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-05
      • 2015-09-01
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      相关资源
      最近更新 更多