2013-08-20 5 views
2

У меня странная проблема, где в основном у меня есть корзина с помощью сеанса. Когда я развертываю сайт с помощью IIS7, все выглядит нормально. Я добавляю продукт в сеанс на одном ПК, и он отображается в моей корзине. Когда я получаю доступ к сайту из другого компьютера, у этого корзины есть этот товар !! ??Сессия видна на других компьютерах?

Его понимание того, что экземпляр сеанса уникален для каждого браузера пользователя, является ли это правильным? и если да, то как мне это удалось? Я знаю его, наверное, что-то глупое, но я не могу понять, любая помощь очень ценится!

Моей сессия телега кода выглядит следующим образом

#region Singleton Implementation 

     public static readonly ShoppingCart Instance; 
     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["sCart"] == null) 
      { 
       Instance = new ShoppingCart(); 
       Instance.Items = new List<CartItem>(); 
       HttpContext.Current.Session["sCart"] = Instance; 
      } 
      else 
      { 
       Instance = (ShoppingCart)HttpContext.Current.Session["sCart"]; 
      } 

     } 

     protected ShoppingCart() { } 

     #endregion 
+0

Ваша реализация singleton в вашей сессии неверна. См. http://stackoverflow.com/questions/6076459/static-singleton-in-asp-net-session. Вы не должны хранить ссылку в статической переменной, вы должны ее возвращать. – IvanH

ответ

5

Вы хранение один статическую ссылки на одну глобальную ShoppingCart.
Это ужасная идея.

Всякий раз, когда вы пишете ShoppingCart.Instance, он всегда возвращает исходное значение ou в статическом конструкторе.

Вам нужно избавиться от синглтона и всегда использовать сеанс.

2

Это из-за public static readonly ShoppingCart Instance;

Экземпляр всегда возвращает то же самое для всех из-за статики (относится к уровню приложения).