网站需要显示在线访问人数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网站需要显示在线访问人数相关的知识,希望对你有一定的参考价值。

Insus.NET开发这样多网站,客户一直没有这个要求。不过,现在有客户有这样的要求了。

在线用户访问人数,也就是说,要为网站写一个计数器,计数器的初始值为0,网站一开始运行时(Application_Start),就开始统计,当有用户访问时(Session_Start)计数器加1,当用户访问离开时(Session_End)计数器减1。

在网站中,有一个文件叫做Global.asax:
技术分享


在程序开始时,定义一个计数器,初始值为0

技术分享
 Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
         Code that runs on application startup
        
        Application("OnlineVisitors") = 0
    End Sub
View Code


当有用户访问网站时:

技术分享
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
         Code that runs when a new session is started
        
        Application.Lock()
        Application("OnlineVisitors") = DirectCast(Application("OnlineVisitors"), Integer) + 1
        Application.UnLock()
    End Sub
View Code


当用户离开网站时:

技术分享
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
         Code that runs when a session ends. 
         Note: The Session_End event is raised only when the sessionstate mode
         is set to InProc in the Web.config file. If session mode is set to StateServer 
         or SQLServer, the event is not raised.
        
        Application.Lock()
        Application("OnlineVisitors") = DirectCast(Application("OnlineVisitors"), Integer) - 1
        Application.UnLock()
    End Sub
View Code


上面两个Session_Start和Session_End方法中,Insus.NET有使用Application.Lock和Application.Unlock方法,是为了防止多个线程同时改变这个变量,在变更计数器时,先把它Lock起来,更变完毕,再Unlock。


把Global.asax文件保存,在网页中需要显示网站在线访问人数的位置:

 <%= Application("OnlineVisitors").ToString()%>

 
测试测试,测试过程中,Insus.NET有使用了两个浏览器,这样是为了让网站获取不同的进程访问者。而每个浏览器打开不同的窗口,所获得到的数据变量。
技术分享

 

 后记:
此种方法,只是做表面功夫,统计不了真正的在线访问人数。如果需要真正实现在线人数统计,还得需要获取访问者的其它参数来一起判断。

以上是关于网站需要显示在线访问人数的主要内容,如果未能解决你的问题,请参考以下文章

利用Listener实现网站累积访问人数最大同时在线人数当前登录用户数的记录

全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段

如何统计网站在线人数?

Asp.Net MVC3.0网站统计登录认证的在线人数

java监听器之实现在线人数显示

选择网站服务器需注意的事项