2017-08-22 48 views
0

我想清除一個會話數據,但它將清除會話數據。下面是我用來清除會話數據的2個MVC操作方法。確實Session.Clear();清除所有會話數據

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; 

     } 

所以像這樣我的數據存儲在兩會,但是當我運行這個asp.net MVC操作方法來清除一個會話數據,它會自動清除第二個會話數據。

爲什麼這麼喜歡這個?請向我說明爲什麼發生這種情況。

或者我需要做些什麼來解決這個問題?

+0

1)會議[「WishItem」] 2)會議[「CartItem」]這是兩個會話 –

回答

0

簡短回答是,就目前的收藏。

據ASP.NET文件,HttpSessionState.Clear方法刪除所有鑰匙,並從當前活動的會話狀態收藏價值(它不破壞用戶的會話狀態的基礎),這樣既Session["WishItem"] & Session["CartItem"]值從集合中清除在一起當執行該方法時,但會話狀態基本保持活動狀態

在這種情況下有兩種不同的會話收集密鑰&實際上他們都使用同一會話狀態。要清除單個會話數據,有兩種不同的方法:

1)使用Session.Remove刪除會話密鑰。

Session.Remove("WishItem"); 

2)將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 
} 

注意,每個認證的用戶總是與一個會話狀態基地因此使用Session.Clear被分配,刪除所有現有密鑰 - 存儲在當前用戶的會話集合中的值對(不影響其他用戶的會話狀態)。

+0

首先謝謝你的回答非常詳細:) 現在我正在使用「Session [」WishItem「] = null 「方法使其爲空,但是當我運行我的項目然後在視圖中我得到此錯誤/異常: - 」System.NullReferenceException:對象引用未設置爲對象的實例。「在視圖代碼的這部分中=>「@if(Session.Count> 0 && Session [」WishItem「]。ToString()!= null)「 –

+0

你可以在ToString之前用空合併來解決它:@if(Session.Count> 0 &&(Session [」WishItem「] String.Empty).ToString())'檢查:'@if(Session.Count> 0 && Session [「WishItem」]!= null)'。 –

+0

是的,它現在可以工作了......再次感謝您解決我的問題。 –