我有一个奇怪的问题,基本上我有一个使用会话的购物车。当我使用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 :(得分:5)
您将单个静态引用存储到单个全局ShoppingCart
这是一个可怕的想法。
每当你写ShoppingCart.Instance
时,它总是返回静态构造函数中设置的原始值。
您需要摆脱单身人士并始终使用会话。
答案 1 :(得分:2)
这是因为public static readonly ShoppingCart Instance;
由于静态(适用于应用程序级别),实例始终为每个人返回相同的内容。