標籤:
背景
首先,要說明的是,原先需求定義的是,同一個帳號只能同時有一個人來登入,如果另外一個登入的話,前一個登陸者就自動被踢掉。本來原先要做成儲存到伺服器的資料庫中,但是後來如果是非正常退出的話 下次就沒法登入,這下就上網找資料 改了以後就有了下面的東東了。
登陸頁後台
Login.aspx.cs //單點登入判斷 Hashtable hOnline = (Hashtable)Application["Online"]; if (hOnline != null) { int i = 0; while (i < hOnline.Count) //因小BUG所以增加此判斷,強制查詢到底 { IDictionaryEnumerator idE = hOnline.GetEnumerator(); string strKey = ""; while (idE.MoveNext()) { if (idE.Value != null && idE.Value.ToString().Equals(userInfo[0].UserId.ToString())) { //already login strKey = idE.Key.ToString(); hOnline[strKey] = "XXXXXX"; break; } } i = i + 1; } } else { hOnline = new Hashtable(); } hOnline[Session.SessionID] = userInfo[0].UserId; Application.Lock(); Application["Online"] = hOnline; Application.UnLock();
View Code
PS:這段代碼可直接放入登入按鈕裡,在進行了密碼正確與否後直接使用。
基礎頁後台(公用頁)
asePage.aspx.cs //單點登入判斷 Hashtable hOnline = (Hashtable)Application["Online"]; if (hOnline != null) { IDictionaryEnumerator idE = hOnline.GetEnumerator(); while (idE.MoveNext()) { if (idE.Key != null && idE.Key.ToString().Equals(Session.SessionID)) { //already login if (idE.Value != null && "XXXXXX".Equals(idE.Value.ToString())) { hOnline.Remove(Session.SessionID); Application.Lock(); Application["Online"] = hOnline; Application.UnLock(); string js = "<script language=javascript>alert(‘{0}‘);parent.window.location = ‘{1}‘ </script>";//window.location.replace(‘{1}‘) Response.Write(string.Format(js, "帳號已在別處登入 ,你將被強迫下線(請保管好自己的使用者密碼)!", ResolveClientUrl("~/Login.aspx"))); Session["UserInfo"] = null; return; } break; } } }
View Code
PS: 這段代碼就是判斷依據。
結果示範
【C#】ASP.NET網頁中添加單點登入功能