使用Application和SessionID实现在线用户列表统计

本文介绍了如何利用ASP.NET中的Application对象和SessionID来实时统计网站当前在线的用户数量,包括用户会话的启动和结束时的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值