Things that are static only have one copy that is shared by everyone and your static constructor is only called once (the first time ShoppingCart is accessed). So basically the first person to use their cart has a cart created and store in their session, and that cart is then used by everyone else via the Instance property of your class. You are basically using a singleton pattern and that is exactly what you're getting....a single cart.
You need to return Instance each time it is accessed rather than storing it the way you are.
static class ShoppingCart()
{
public static ShoppingCart Instance
{
get
{
ShoppingCart cart = null;
if (HttpContext.Current.Session["ASPNETShoppingCart"] == null)
{
cart = new ShoppingCart();
cart.Items = new List();
HttpContext.Current.Session["ASPNETShoppingCart"] = cart;
}
else
{
cart = (ShoppingCart)HttpContext.Current.Session["ASPNETShoppingCart"];
}
return cart;
}
}
}