2013-01-08 93 views
0

Appengine 1.7.4,webapp2,sessions。Web應用程序2和POST請求後消失的會話

會話被配置爲顯示在文檔: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) 

兩個POST請求通過AJAX發送。

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遷移後開始出現問題。

感謝您的任何建議。

回答

0

這兩個請求之間有多少時間?少於1或2秒?那麼你可能在這裏有一個競賽條件:

  1. Req。 1閱讀會議
  2. 需求。 2閱讀會議
  3. 需求。 1保存會話
  4. Req。 2保存會話

==>從Req。 1丟失。請注意(由於appengine的分佈式架構)「保存」,即使之後請求本身已經完成!