POSTapp2和POST请求后消失的会话

时间:2013-01-08 23:54:13

标签: ajax google-app-engine session webapp2

Appengine 1.7.4,webapp2,session。

会话配置如文档中所示: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迁移后出现问题。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

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

  1. 所需物品。 1读取会话
  2. 所需物品。 2读取会话
  3. 所需物品。 1保存其会话
  4. 所需物品。 2保存其会话
  5. ==>来自要求的变化1丢失了。请注意(由于appengine的分布式架构)" save"在>请求本身完成后,甚至可以发生