Количество обновлений в корзине покупок по истечении сеанса пользователя - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть корзина покупок, сохраненная в сеансе, которая уменьшает количество товаров, хранящихся в базе данных, когда пользователь нажимает кнопку покупки.

Если пользователь закрывает свой браузер до того, как заплатит, я хочу вернуть эти количества обратно в базу данных..

Я делаю это в событии void Session_End (отправитель объекта, EventArgs e) в global.asax, но количество элементов не увеличивается.Я установил время ожидания сеанса в 1 минуту в файле web.config, и сеанс действительно заканчивается, потому что, если я сижу там с полной корзиной покупок, она пуста через минуту, но количества в базе данных не обновляются.

это мой код в 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 голосов
/ 19 апреля 2011

Возможно, ваша проблема связана с тем, что состояние сеанса может быть недоступно в событии окончания сеанса. Как вы ссылаетесь на состояние сеанса в ShoppingCart.Instance accessor? Событие окончания сеанса не обязательно вызывается при завершении запроса, поэтому у вас может не быть действительного HttpContext для получения состояния сеанса.

Несмотря на это, событие Session_End - ненадежный способ достичь того, что вы хотите сделать. Например, для сеанса вне процесса событие не вызывается. Что произойдет с вашими биржевыми данными в случае сбоя домена приложения, на котором размещено ваше веб-приложение? Лучшее решение - отмечать количество товара на складе только при его покупке (а не при добавлении товара в корзину).

...