2009-09-18 56 views
7

我在建立一個類來存儲會話中的用戶ID和用戶角色。我不確定當多個用戶同時在網站上時,這個班級的行爲如何。有沒有人看到這個問題?靜態會話類和多個用戶

public static class SessionHandler 
    { 
     //*** Session String Values *********************** 

     private static string _userID = "UserID"; 
     private static string _userRole = "UserRole"; 

     //*** Sets and Gets ********************************************************** 

     public static string UserID 
     { 
      get 
      { 
       if (HttpContext.Current.Session[SessionHandler._userID] == null) 
       { return string.Empty; } 
       else 
       { return HttpContext.Current.Session[SessionHandler._userID].ToString(); } 
      } 
      set 
      { HttpContext.Current.Session[SessionHandler._userID] = value; } 

     } 
     public static string UserRole 
     { 
      get 
      { 
       if (HttpContext.Current.Session[SessionHandler._userRole] == null) 
       { return string.Empty; } 
       else 
       { return HttpContext.Current.Session[SessionHandler._userRole].ToString(); } 
      } 
      set 
      { HttpContext.Current.Session[SessionHandler._userRole] = value; } 
     } 

} 
+1

無法測試並鼓勵使用靜態「全局」助手等不良做法。這不是一個技術問題,更多的是長期影響的心態問題 – MikeSW 2013-05-17 05:08:27

回答

6

您發佈的代碼與我們在此處的代碼完全相同。

它現在工作正常2年了。

每個用戶的訪問都是自己的會話。每次向服務器發出的請求都是一個新線程。即使2個請求是同時發生的,但HttpContext.Current對於每個請求都是不同的。

3

您將得到每個連接的新會話。沒有兩個用戶會共享會話。每個連接都有自己的SessionID值。只要用戶停留在您的頁面上(不關閉瀏覽器等),用戶就會將該會話從一個請求保留到另一個。

+0

不一定......如果您正在進行跨站點身份驗證......您可以使用同一個會話進行新身份驗證的用戶。我之前遇到過這個問題。會話與認證無關。如果用戶能夠結束會話並終止第一個站點上的授權,授權將從第二個站點消失,但會話是分開的。 – KingOfHypocrites 2014-07-15 00:33:16

0

這對於訪問您的應用程序的多個用戶可以正常工作,因爲會爲所有訪問應用程序的deffrent用戶生成不同的sessionid。如果您在系統中定義了兩個不同的會話變量,它將以類似的方式工作。 這將像使用靜態包裝類SessionHandler包裝兩個會話狀態。