【问题标题】:Webapp2 and disappearing session after POST requestWebapp2和POST请求后消失的会话
【发布时间】:2012-12-22 23:07:56
【问题描述】:

Appengine 1.7.4、webapp2、会话。

会话的配置如文档中所示:http://webapp-improved.appspot.com/api/webapp2_extras/sessions.html#webapp2_extras.sessions.SessionStore

# Some object
def post(self):
    logging.error(self.session.get('cart')) #A 1 item

    if '_put' in self.request.params:
        return self.put()

    cart = self.session.get('cart')
    # add one item to cart
    self.session['cart'] = cart

    logging.error(self.session.get('cart')) #B OK, 2 items
    return self.redirect(URL)

def put(self):
    logging.error(self.session.get('cart')) #C 1 item?!
    # some code
    return self.redirect(URL)

通过 AJAX 发送两个 POST 请求。

First without _put
- #A - returns 1 item - OK.
- #B - returns 2 items - OK.

Second, POST with _put.
- #A - returns 1 item - why? session was changed?
- #C - as above

请求一个一个地执行(用户点击一次,两个请求)。任何想法为什么会发生这种情况?

如果我只运行第一个请求(没有 _put)并刷新页面 - 会话保存正确。

从 webapp (1.x) 和 Python 2.5 迁移后开始出现问题。

感谢您的任何建议。

【问题讨论】:

    标签: ajax google-app-engine session webapp2


    【解决方案1】:

    这两个请求之间有多少时间?少于 1 或 2 秒?那么你可能会在这里遇到竞争条件:

    1. 请求。 1 读取会话
    2. 请求。 2 读取会话
    3. 请求。 1 保存其会话
    4. 请求。 2 保存会话

    ==> 对请求的更改。 1 丢失。请注意(由于 appengine 的分布式架构)“保存”可能发生在请求本身完成之后!

    【讨论】:

      猜你喜欢
      • 2014-11-06
      • 2014-05-13
      • 2012-11-28
      • 2015-08-20
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      相关资源
      最近更新 更多