0

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 迁移后出现问题。

感谢您的任何建议。

4

1 回答 1

0

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

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

==> 需求的变化。1 丢失。请注意(由于 appengine 的分布式架构)即使请求本身完成之后也可能发生“保存”!

于 2013-01-10T09:55:57.963 回答