классическое состояние сессии корзины покупок asp.net - PullRequest
1 голос
/ 30 апреля 2011

Я использовал этот пример для создания корзины покупок: http://net.tutsplus.com/tutorials/other/build-a-shopping-cart-in-aspnet/

Это хороший пример, он хранит корзину покупок в состоянии Session ["cart"] и все должно работать нормально.

НО это не так.Событие, если закрыть браузер или попробовать другие браузеры, он все еще сохраняет состояние?!?!

Вот конструктор + метод добавления в корзину:

public List<CartItem> Items { get; private set; }

        // Readonly properties can only be set in initialization or in a constructor
        public static readonly ShoppingCart Instance;
        // The static constructor is called as soon as the class is loaded into memory
        static ShoppingCart()
        {
            // If the cart is not in the session, create one and put it there
            // Otherwise, get it from the session
            if (HttpContext.Current.Session["MPBooksCart"] == null)
            {
                Instance = new ShoppingCart();
                Instance.Items = new List<CartItem>();
                HttpContext.Current.Session["MPBooksCart"] = Instance;
            }
            else
            {
                Instance = (ShoppingCart)HttpContext.Current.Session["MPBooksCart"];
            }
        }
        // A protected constructor ensures that an object can't be created from outside
        protected ShoppingCart() { }

        public void AddItem(int book_id)
        {
            // Create a new item to add to the cart
            CartItem newItem = new CartItem(book_id);
            // If this item already exists in our list of items, increase the quantity
            // Otherwise, add the new item to the list
            if (this.Items.Contains(newItem))
            {
                foreach (CartItem i in Items)
                {
                    if (i.Equals(newItem))
                    {
                        i.Quantity++;
                        return;
                    }
                }
            }
            else
            {
                newItem.Quantity = 1;
                Items.Add(newItem);
            }

        }

Можете ли вы дать советв чем может быть проблема?

Я читал около 2 часов о состоянии сеанса, и везде говорится, что он должен быть изменчивым при закрытии броузера, но в этом случае это не так.

С уважением, Алекс

1 Ответ

1 голос
/ 30 апреля 2011

Я не очень уверен в использовании шаблона Singleton для хранения экземпляра сеанса.Если вы думаете об этом, сеанс должен быть уникальным для каждого пользователя и каждого браузера, который обращается к веб-сайту.Шаблон Singleton создает один глобальный уникальный экземпляр.Я не знаю, сколько asp.net вы сделали, но на случай, если вы новичок в asp.net, сеанс будет уникальным для конкретного экземпляра браузера.Это означает, что каждый браузер, обращающийся к Session ["MPBooksCart"], будет иметь доступ к своей собственной уникальной копии данных.По умолчанию сеанс asp.net будет хранить свои данные в течение 20 минут (это можно настроить в базе данных).Если бы я писал корзину покупок, я бы, вероятно, просто работал непосредственно с таблицей тележки и таблицей картемии в базе данных.Очень хороший пример веб-сайта магазина - приложение MVC Роба Коннери .Это ASP.Net MVC-приложение, поэтому, если вы не знакомы с MVC, вам может показаться немного сложным в этом.

...