C#怎么统计网站当前在线人数
1.问题背景
c#网站怎么合理的统计在线人数?我想通过全局变量来统计软件的使用情况,当启动软件时向服务器的用户表写开始使用时间,正常退出时写一个结束使用时间,来统计用户的在线使用情况。
但是有一个问题:用户可能不会正常退出,比如电脑断电了,或是直接从进程里面结束... ... 当这种情况下这个结束使用时间怎么获取呢?于是,一场追逐梦想的征途开始了~~~
2.创建项目
打开vitualstudio2019,新建一个网站,然后添加新项,新建一个login.aspx和index.aspx页面。再添加新项,选择全局应用程序类,该页面为Global.asax。
2.1.打开Global.asax页面,在Application_start()方法下写入以下代码:
Application.Add("zzzonline", 0);
2.2.在Session_start()方法中写入以下代码:
Application.Lock(); Application["zzzonline"] = Convert.ToInt32(Application["zzzonline"]) + 1; Application.UnLock();
2.3.在Session_end()方法中写入以下代码:
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
Application.Lock();
Application["online"] = (int)Application["online"] - 1;
Application.UnLock();
2.4.到这里我们的在线人数就已经获取到了,可以通过Label控件或者其他控件输出当前在线人数,如:
Label1.Text=Application["zzzonline"].ToString()+"人"
总结:这篇随笔里面我们记录了通过asp.net全局变量及Application统计在线人数,在新会话产生时增加在线人数,超时未响应则减去当前计数,这里超时时长可以在webconfig中设置,默认为5分钟;在线人数永远都不可能是个精确的值因为它要受时间和性能的约束。如果有更好的方法,欢迎留言讨论!