Session.Clear();清除所有会话数据

时间:2017-08-22 10:28:07

标签: asp.net-mvc session

我想清除一个会话数据,但它正在清除两个会话数据。下面是我的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方法来清除一个会话数据时,它会自动清除第二个会话数据。

为什么这样?请告诉我为什么会这样。

或者我要做些什么来解决这个问题?

1 个答案:

答案 0 :(得分:0)

当前集合的简短回答是

根据ASP.NET文档,HttpSessionState.Clear方法从当前活动的会话状态集合中删除所有键和值(它不会破坏用户的会话状态库),因此Session.Remove {1}}&amp;执行方法时,Session["WishItem"]值将从集合中一起清除,但会话状态库保持活动状态

在这种情况下,有两种不同的会话收集密钥&amp;实际上他们都使用相同的会话状态。要清除单个会话数据,有两种不同的方式:

1)使用test on the chrome console删除会话密钥。

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>