2013-10-30 89 views
2

我想實現一個代碼,每個用戶只能啓用一個會話。 我使用窗體身份驗證的asp.net。如何只允許每個用戶一個活動會話

我看到這篇文章: Limit only one session per user in ASP.NET

,但我想反其道而行之,斷開所有以前的會議。

這裏是我的代碼:

void Application_Start(object sender, EventArgs e) 
{ 
    Application["UsersLoggedIn"] = new System.Collections.Generic.Dictionary<string, string>(); } 

在用戶登錄時,我插入一條記錄:用戶名,會話ID。 如果用戶名存在,我剛更新的SessionID

void Application_BeginRequest(object sender, EventArgs e) 
    { 
     System.Collections.Generic.Dictionary<string, string> d = HttpContext.Current.Application["UsersLoggedIn"] as System.Collections.Generic.Dictionary<string, string>; 
     if (d != null) 
     { 
      if (d.Count > 0) 
      { 
        string userName = HttpContext.Current.User.Identity.Name; 
        if (!string.IsNullOrEmpty(userName)) 
        { 
         if (d.ContainsKey(userName)) 
         { 
          if (d[userName] != HttpContext.Current.Session.SessionID) 
          { 
           FormsAuthentication.SignOut(); 
           Session.Abandon(); 
          } 
         } 
        } 
} 
} 

,但我得到空HttpContext.Current.User。 我也嘗試了「AuthenticatedRequest」,但後來我得到了空Session。

有什麼想法嗎?

回答

2

如果要訪問HttpContext.Current.User和Session,則應使用AcquireRequestState事件。

+0

謝謝!正是我所期待的。 – Inbal

2

如果您在負載平衡的情況下需要多個服務器,您需要以某種方式堅持這一點,但問題出現在您需要釋放用戶鎖定時(無論是終止用戶會話還是註銷)。

相關問題