当用户会话到期时,购物车更新数据库中的数量

时间:2011-04-19 08:34:28

标签: asp.net database shopping-cart

我在会话中存储了一个购物车,当用户点击购买时,它会减少存储在数据库中的商品数量。

如果用户在付款之前关闭浏览器,我想将这些数量返回数据库。

我在global.asax中的void Session_End(object sender,EventArgs e)事件中执行此操作,但项目数量没有增加。我在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();
        }
    }

1 个答案:

答案 0 :(得分:0)

您的问题可能是因为会话状态可能在会话结束事件中不可用。如何在ShoppingCart.Instance访问器中引用会话状态?在结束请求时,不一定会触发会话结束事件,因此您可能没有有效的HttpContext来获取会话状态。

无论如何,Session_End事件是实现您想要做的事情的不可靠方式。例如,对于进程外会话,不会引发该事件。如果托管您的Web应用程序的应用程序域崩溃,您的库存数据会发生什么变化?更好的解决方案是仅在购买商品时标记您的库存数量(而不是在商品添加到购物车时)。