对于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() ">

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

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

Asp.Net 在线(登录)人数统计相关推荐

  1. 统计用户在线登录人数

    2019独角兽企业重金招聘Python工程师标准>>> 服务器启动时,开启一个线程进行记录,线程对象中定义一个静态变量 public class ResourceLog implem ...

  2. 10亿条数据去重后排序和在线日志人数统计

    一:10亿条数据排序 思路:数据量比较大,普通比较会占用很多的内存,可以采用其他方法,构造一个字节数组 每个字节的值代表连续八个整形数据的值是否存在,即使包括最大的整数值,大概内存512m 源码如下 ...

  3. 网站在线访问人数统计并计算停留时间

    网站在线人数: void Application_Start(object sender, EventArgs e) {    // 在应用程序启动时运行的代码    //初始化    Applica ...

  4. java扫描所有用户信息_监听器实现案例----自定义session扫描器和统计在线用户人数及用户信息...

    一.案例一:自定义Session扫描器 1.案例说明 当一个Web应用创建的Session很多时,为了避免Session占用太多的内存,我们可以选择手动将这些内存中的session销毁,那么此时也可以 ...

  5. 统计在线人数和登录人数

    思想:       1:统计在线人数.               只是访问了这个网页的人员. 一个session的创建就是一个在线人数+1.让所有人都可以看到.把在线人数到ServletContex ...

  6. c语言网络在线人数统计,教你用ASP程序实现网站在线人数统计

    欢迎来到小编的文章进行学习阅读,想必大家又有很多问题吧,在这里会有你想要收获的答案,请大家慢慢学习吧!计算机编程语言 在浏览网页的时侯,常常可以看见一些"当前网站上的人数是XXX人" ...

  7. php学生成绩管理系统,在线录入、统计学生成绩,多种图表展示对比学生成绩

    教学质量是学校教学的生命线,只有能够客观分析自己教学成败得失的教师才是一个合格的老师.这是一款注重优化成绩采集方法.丰富成绩分析维度的小学成绩统计系统,力争做到符合教师工作习惯.使用方法简单.数据分析 ...

  8. 如何用 SpringBoot 实现并发登录人数控制(附代码)

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 作者 ...

  9. springboot + shiro之登录人数限制、登录判断重定向、session时间设置

    springboot + shiro之登录人数控制 项目 前篇:spring boot + mybatis + layui + shiro后台权限管理系统:https://blog.51cto.com ...

最新文章

  1. 推荐7本EEG领域值得阅读的书籍
  2. mysql的varchar要根据实际长度来申请
  3. 一只快乐的野指针_野酸枣
  4. Linux从零开始(三、命令图解)
  5. java zookeeper 主从热备_zookeeper 核心原理
  6. 转错误 x error LNK1104: 无法打开文件“E:\xxxx\Debug\xxxx.exe”
  7. 【numpy】argmax参数辨析(axis=0,axis=1,axis=-1)
  8. C语言编译器字母怎么输入,c语言编译器怎么使用,c语言编译器下载使用教程
  9. 20190801H3C无线控制器3510H 版本升级总结
  10. L1-005 考试座位号 (15 分)
  11. 电脑端Ins图片保存
  12. 炫我科技渲染集群管理软件
  13. 优化服务器卡顿,如何解决国外服务器卡顿问题
  14. 鸿蒙开发工具在哪下载,【鸿蒙开发工具下载】华为鸿蒙开发工具软件下载 v2.1.8 最新版-七喜软件园...
  15. 电容笔和触控笔有什么区别?第三方电容笔了解下
  16. SQL修改表结构写法
  17. 【软件测试及质量保证】小结
  18. 形态学重建:孔洞填充的python实现
  19. 自动弹出窗口html代码,强制弹出广告页面+自动最小化代码
  20. C 连接ACCESS数据库代码实例

热门文章

  1. JVM介绍与知识脉络梳理
  2. 【图文详解】python爬虫实战——5分钟做个图片自动下载器
  3. 手机扫码报修系统有哪些功能?
  4. AURIX TC397 SCU 之 Watchdog 看门狗
  5. 基于51单片机的APDS9960 驱动
  6. 影视站长必备资料合集
  7. 华工高级语言程序设计c十十作业,华工高级语言程序设计c随堂练习答案
  8. 中国保健品市场供需规模与投资前景预测分析报告2022-2027年版
  9. **公司软件开发人员绩效评价标准(zt)
  10. 帝国双璧--卫青与霍去病