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 によって送信される 2 つの 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

リクエストは 1 つずつ実行されます (ユーザーが 1 回クリックすると、2 つのリクエストが実行されます)。なぜこれが起こっているのでしょうか?

最初のリクエスト (_put なし) のみを実行してページを更新すると、セッションは正しく保存されます。

webapp (1.x) と Python 2.5 からの移行後に問題が発生しました。

提案をありがとう。

4

1 に答える 1

0

これら 2 つの要求の間の時間はどれくらいですか? 1秒か2秒未満?次に、ここで競合状態が発生する可能性があります。

  1. 必須 1 セッションを読み取ります
  2. 必須 2 セッションを読み取ります
  3. 必須 1 はそのセッションを保存します
  4. 必須 2 はそのセッションを保存します

==> 要件からの変更。1が失われます。(appengine の分散アーキテクチャにより)リクエスト自体が終了したでも「保存」が行われる可能性があることに注意してください。

于 2013-01-10T09:55:57.963 に答える