程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 通過SessionID和用戶名來保證同一個用戶不能同時登錄

通過SessionID和用戶名來保證同一個用戶不能同時登錄

編輯:關於ASP.NET

可以通過SessionID和用戶名來保證同一個用戶不能同時登錄的問題,下面程序模仿了 QQ的登錄,當登錄後判斷當前帳號是否已經登錄,如果登錄。則踢掉以前登錄的用戶。

1.通過Application全局變量來存儲SessionID和用戶名,每次登錄時都保存,並且將 該Application存入 Hashtable中,當用戶登錄成功後,首先判斷該用戶是否已經存儲在 Application中,如果存在(說明已經登錄),則將該用戶對應的值設置為 XX(值為無用 ).

代碼

protected void loginbtn_Click(object sender, EventArgs e)
     {
         //登錄成功。。。。。。。
         Hashtable hOnline = (Hashtable)Application["Online"];// 讀取全局變量
         if (hOnline != null)
         {
             IDictionaryEnumerator idE =  hOnline.GetEnumerator();
             string strKey = "";
             while (idE.MoveNext())
             {
                 if (idE.Value != null &&  idE.Value.ToString().Equals(UserID))//如果當前用戶已經登錄,
                 {
                     //already login
                     strKey = idE.Key.ToString();
                     hOnline[strKey] = "XX";//將當前用 戶已經在全局變量中的值設置為XX
                     break;
                 }
             }
         }
         else
         {
             hOnline = new Hashtable();
         }
         hOnline[Session.SessionID] = UserID;//初始化當前用戶的
         Application.Lock();
         Application["Online"] = hOnline;
         Application.UnLock();
         Response.Redirect("main.aspx");
     }

2,寫一個BasePage加一個Init方法如下,系統的所有頁面均繼承自該BasePage

代碼

 protected override  void OnInit(EventArgs e)
    {
        Hashtable hOnline = (Hashtable)Application["Online"];//獲 取已經存儲的application值
        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 &&  "XX".Equals(idE.Value.ToString()))//說明在別處登錄
                   {
                        hOnline.Remove (Session.SessionID);
                        Application.Lock();
                        Application["Online"] =  hOnline;
                        Application.UnLock();
                        Response.Write ("<script>alert('你的帳號已在別處登陸,你被強迫下 線!');top.location.href='Default.aspx';window.close();</script>");//退 出當前到登錄頁面
                       // Response.Redirect ("Default.aspx");
                        Response.End();
                      //  return false;
                   }

                   //break;
              }

         }
    }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved