我想清除一个会话数据,但它正在清除两个会话数据。下面是我的2个MVC动作方法,用于清除会话数据。
1)
public int Clearsesson()
{
int i = 0;
List<Wish_Product> products = new List<Wish_Product>();
if (**Session["WishItem"]** != null)
{
Session.Clear();
i = 1;
}
else
{
i = 0;
}
return i;
}
2)
public int Clearsesson2()
{
int i = 0;
List<Cart_Product> products = new List<Cart_Product>();
if (**Session["CartItem"]** != null)
{
// Session.Remove("CartItem");
Session.Clear();
i = 1;
}
else
{
i = 0;
}
return i;
}
所以这样我将数据存储在两个Sessions中,但是当我运行这个asp.net MVC Action方法来清除一个会话数据时,它会自动清除第二个会话数据。
为什么这样?请告诉我为什么会这样。
或者我要做些什么来解决这个问题?
答案 0 :(得分:0)
当前集合的简短回答是是。
根据ASP.NET文档,HttpSessionState.Clear
方法从当前活动的会话状态集合中删除所有键和值(它不会破坏用户的会话状态库),因此Session.Remove
{1}}&amp;执行方法时,Session["WishItem"]
值将从集合中一起清除,但会话状态库保持活动状态。
在这种情况下,有两种不同的会话收集密钥&amp;实际上他们都使用相同的会话状态。要清除单个会话数据,有两种不同的方式:
Session["CartItem"]
2)根据密钥为会话状态分配Session.Remove("WishItem");
值。
null
它们之间的区别在于前者删除了键和值,因此它不再在会话集合中显示为键值对,后者用指定的键覆盖当前集合值,但键名仍未更改。
因此,您可以单独删除每个会话数据,而无需像下面这样清除另一个会话密钥:
Session["WishItem"] = null;
请注意,每个经过身份验证的用户始终会被分配一个会话状态库,因此使用public int ClearSession()
{
int i = 0;
// other code logic
if (Session["WishItem"] != null)
{
// only WishItem key has cleared
Session.Remove("WishItem");
i = 1;
}
// other code logic
}
public int ClearSession2()
{
int i = 0;
// other code logic
if (Session["CartItem"] != null)
{
// only CartItem key has cleared
Session.Remove("CartItem");
i = 1;
}
// other code logic
}
会删除当前用户在会话集合中存储的所有现有键值对(不会影响其他用户的会话状态)。 / p>