Asp.Net 在线(登录)人数统计

对于Web开发来说,统计访问或登录系统的人数是一件重要且常见的工作。

统计的主要方法一般是应用Application和Session来保存在线人数。这里介绍的例子是可以满足对访问系统,以及通过用户名密码登录系统的人数的统计,同时,也可以满足由于等待Session过期后才能统计,才能将在线人数减少的问题,当直接关闭浏览器时,立即减少人数,从而实现相对准确的统计值。开始吧~

1、配置Web.Config文件

将Session的状态配置成如下。

<sessionState mode= " InProc "></sessionState>


2、Global.asax中的各个方法

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

<script runat="server">

    void Application_Start(object sender, EventArgs e) 
    
    
    void Application_End(object sender, EventArgs e) 
    {
        //  在应用程序关闭时运行的代码
        Application.RemoveAll();
    }
            
    void Application_Error(object sender, EventArgs e) 
    { 
        // 在出现未处理的错误时运行的代码
        
    }

    void Session_Start(object sender, EventArgs e) 
    {
        // 在新会话启动时运行的代码
        Session.Timeout = 30;

    }
        
    void Session_End(object sender, EventArgs e) 
    {
        // 在会话结束时运行的代码。 
        
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
        
// 或 SQLServer,则不会引发该事件。
        Application.Lock();  
        if (Application["Counts"] != null)
        {
             Application["Counts"] = Int32.Parse(Application["Counts"].ToString()) - 1;
             if (Int32.Parse(Application["Counts"].ToString()) < 0)
             Application["Counts"] = 0;       
        }
        Application.UnLock();    
    }
       
</script>

至此,基本完成了统计的功能。即只要有用户访问系统的第一个页面,就有计数。也因为这样,导致统计的数量不是很准确。


3、登录成功后的人数处理

在登录成功后,即Session写入后,加入以下代码,对人数进行加以操作。

  Application.Lock(); 
   if (Application[ " Counts "] !=  null)
  {
         Application[ " Counts "] = Int32.Parse(Application[ " Counts "].ToString()) +  1;
  }
   else
  {
         Application[ " Counts "] =  1;
  }
  Application.UnLock();

 

4、退出时减一

 Session.RemoveAll();      
 Session.Abandon();//取消会话状态就会触发Session_End的事件、

    //在点击了“退出”按钮后增加以下,进行人数的减一操作

    Application.Lock();  
    
if (Application["Counts"!= null)
    
{
         Application[
"Counts"= Int32.Parse(Application["Counts"].ToString()) - 1;
         
if (Int32.Parse(Application["Counts"].ToString()) < 0)
         Application[
"Counts"= 0;       
   }

   Application.UnLock();    

 

5、当关闭窗口时的统计(关键的地方)
如果页面是用框架结构做的,则里面不能用.net的控件,而且没有body,因此,我们只能调用其他的页面来实现。
方法如下:

<script language= " javascript " type= " text/javascript ">
function PageClose()
 {
         //这样写,主要是防止刷新也触发该事件
      if( event.clientX>document.body.clientWidth- 30 &&  event.clientY< 0 ||  event.altKey)  // event.altKey表示按下了Alt按纽
     
{             
         // alert("X:"+event.clientX+"  Y:"+event.clientY+"  "+document.body.clientWidth);
           window.location .href= " PageCloseCount.aspx ";
           widnow.close();
        }

}
</script> 
</head>
<frameset on beforeunload= " PageClose() " rows= " 88,* " cols= " * " framespacing= " 0 " frameborder= " no " border= " 0 " bordercolor= " #0099FF ">
  <frame src= " top.aspx " name= " topFrame " scrolling= " NO " noresize>
  <frameset rows= " * " cols= " 148,* " framespacing= " 0 " frameborder= " no " border= " 0 " bordercolor= " #33CCFF ">
    <frame src= " left.aspx " name= " leftFrame " scrolling= " yes " noresize>
    <frame src= " desktop.aspx " name= " mainFrame " scrolling= " yes ">
  </frameset>
</frameset>
<noframes><body>
</body></noframes>

 

PageCloseCount里调用的方法:

  public  void PageClose()
 {
      System.Web.HttpContext.Current.Session.RemoveAll();      
        System.Web.HttpContext.Current.Session.Abandon();
 }
   


如果不是用框架做的就要简单些了,可以不需要调用其他的页面来执行方法,用他自己就可以了。
部分代码:

 <script language= " javascript " type= " text/javascript ">
 function PageClose()
 {
      if( event.clientX>document.body.clientWidth -30 &&  event.clientY< 0 ||  event.altKey)  // event.altKey表示按下了Alt按纽
     
{  
           document.all( ' ButtonPageClose ').click();
           document.all( ' ButtonPageClose ').focus();
     }
 }
 </script>  
 </head>
 <body  on beforeunload= " PageClose() ">

按纽里的方法同上面一样,也是取消会话。

这个方法我测试了,好象基本上可以,但是又好象有时没调用到,好象是和用户点击按纽的位置有关。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值