1. 程式人生 > >使用Application和SessionID實現線上使用者列表統計

使用Application和SessionID實現線上使用者列表統計

Application是一個共享物件,意味著所有訪問此應用程式的客戶均可以看到這個Application物件的值。使用Application和SessionID來統計當前線上人數。


程式碼

<%@ Application Language="C#" %>

<script runat="server">   

void Application_Start(object sender, EventArgs e)    

{        // 在應用程式啟動時執行的程式碼       

 System.Data.DataTable onlineUser = new System.Data.DataTable();      

  onlineUser.Columns.Add("SessionID");      

  onlineUser.Columns.Add("userIP");     

   onlineUser.Columns.Add("browser");    

    onlineUser.Columns.Add("osName");      

  onlineUser.AcceptChanges();    

    Application.Lock();      

  Application["onlineUser"] = onlineUser;       

 Application.UnLock();   

}       

 void Application_End(object sender, EventArgs e)    

 {        //  在應用程式關閉時執行的程式碼   

}          

  void Application_Error(object sender, EventArgs e)    

 {         // 在出現未處理的錯誤時執行的程式碼  

  }   

void Session_Start(object sender, EventArgs e)    

{        // 在新會話啟動時執行的程式碼      

  string sessionID = Session.SessionID;   

     string userIP = Request.UserHostAddress;   

     HttpBrowserCapabilities bc = Request.Browser;      

  string osName = bc.Platform;      

  string browser = bc.Type;     

   System.Data.DataTable userDt = Application["onlineUser"] as System.Data.DataTable;    

    if (userDt == null)     

   {           

 return;       

 }       

 System.Data.DataRow[] currentRow=userDt.Select("SessionID='"+sessionID+"'");     

   if (currentRow.Length <= 0)     

   {            //當前使用者沒有線上           

 System.Data.DataRow newRow =userDt.NewRow();     

       newRow["SessionID"] = sessionID;      

      newRow["userIP"] = userIP;         

   newRow["browser"] = browser;    

        newRow["osName"] = osName;       

     userDt.Rows.Add(newRow);           

 userDt.AcceptChanges();           

Application.Lock();           

 Application["onlineUser"] = userDt;       

     Application.UnLock();                

    }   

 }   

void Session_End(object sender, EventArgs e)   

  {        // 在會話結束時執行的程式碼。        

 // 注意: 只有在 Web.config 檔案中的 sessionstate 模式設定為     

   // InProc 時,才會引發 Session_End 事件。如果會話模式設定為 StateServer        

 // 或 SQLServer,則不會引發該事件。       

 string sessionID = Session.SessionID;           

    System.Data.DataTable userDt = Application["onlineUser"] as System.Data.DataTable;     

   if (userDt == null)       

 {           

 return;      

  }      

  foreach (System.Data.DataRow dr in userDt.Select("SessionID='" + sessionID + "'"))    

    {       

     userDt.Rows.Remove(dr);   

     }      

  userDt.AcceptChanges();     

   Application.Lock();   

     Application["onlineUser"] = userDt;       

 Application.UnLock();   

}     

  </script>