2011-04-19 31 views
0

我存儲在當用戶點擊購買從而降低存儲在數據庫中的項目數量的會話的購物車。購物車更新量的情況下用戶的會話過期

如果用戶他們已支付之前我要回這些量回數據庫關閉瀏覽器。

我在虛空Session_End中在Global.asax中做這個(對象發件人,EventArgs的)事件,但項目數量沒有增加。我在web.config中將會話超時設置爲1分鐘,會話確實結束,因爲如果我坐在那裏有一個完整的購物車,一分鐘後它是空的,但數據庫中的數量不會更新。

這是我在Session_End中的代碼

void Session_End(object sender, EventArgs e) 
    { 

     if (ShoppingCart.Instance.Items.Count == 0) 
      return; 
     foreach (var cartItem in ShoppingCart.Instance.Items.OfType<CartItemGeneric>()) 
     { 
      var stock = thisModel.EshopItems.Where(i => i.Id == cartItem.Item.Id).First(); 
      stock.SapQuantity += cartItem.Quantity; 
      thisModel.SaveChanges(); 
     } 
    } 

回答

0

你的問題可能是由於一個事實,即會話狀態可能在會議結束事件不可用。如何在ShoppingCart.Instance訪問器中引用會話狀態?會話結束事件不一定在請求結束時被觸發,因此您可能沒有有效的HttpContext來獲取會話狀態。

無論如何,Session_End中的事件是不可靠的方式來實現你想要做什麼。例如,對於進程外會話,該事件不會引發。如果託管您的Web應用程序的應用程序域崩潰,您的庫存數據會發生什麼?更好的解決方案是僅在購買商品時(而不是在商品添加到購物車時)標記庫存數量。