简单的⽹站在线⼈数统计
统计在线⽤户的作⽤不⾔⽽喻,就是为了⽹站管理者可以知道当前⽤户的多少,
然后根据⽤户数量来观察服务器或者程序的性能,从⽽可以直观的了解到⽹站的吸
引⼒或者⽹站程序的效率。现在,我们就介绍⼀个简单明了的⽅法来统计在线⽤户
的多少,该⽅法的特点就是充分的利⽤了ASP.NET的特点,结合global.asax⽂件,
⽤Application和Session巧妙的实现在线⽤户的统计,由于程序中只⽤到⼀个
Application,所以,程序占⽤系统资源⼏乎可以忽略不及,当然,这也是⽹站管
理者最关⼼的问题之⼀。
⼀、⽤户显⽰页⾯的使⽤
⾸先,我们来看看怎样现实当前⽹站的访问⽤户数量,程序代码如下:
<%@ Page Language="c#" debug="true" %>
<html>
<head>
<SCRIPT LANGUAGE="c#" RUNAT="server">
private void Page_Load(object sender, System.EventArgs e)
{
Visitors.Text = "本站当前有:<b>" + Application["user_sessions"].
ToString() + "" + "</b>位访问者 !";
}
<title>在线⽤户</title>
</head>
<body>
<asp:label id="visitors" runat="server" /><br>
在线代码运行器</body>
</html>
可以看出,以上的程序特别简单,就是调⽤Application。当然,我们不必要
专门设计⼀个页⾯来显⽰在线⽤户数量,在⽹站的任何页⾯,我们都可以直接调⽤Application("user_sessions").ToString()来显⽰当前⽤户数量。
⼆、global.asax⽂件实现
global.asax⽂件的作⽤我们⾃不必说,现在,我们直接来看统计当前在线⽤
户数量如何实现:
<script language="c#" runat="Server">
protected void Application_Start(Object sender, EventArgs e)
{
Application["user_sessions"] = 0;
}
protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock();
Application["user_sessions"] = (int)Application["user_sessions"] + 1;
Application.Unlock();
}
protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application["user_sessions"] = (int)Application["user_sessions"] - 1;
Application.Unlock();
}
</script>
以上代码很容易理解,当⽹站开始服务的时候(Application开始的时候),
程序设置Application["user_sessions"]为零,然后,当⽤户进⼊⽹站(Session
开始的时候)的时候,锁定Application,然后,将application(
"user_sessions")加⼀,⽤户退出⽹站的时候,application("user_sessions"
)减⼀。这样,就很巧妙的实现了在线⽤户的统计。
三、⼀点讨论
以上的统计,简明扼要,程序很容易实现。但是,如果我们仔细考虑,发现该
⽅法有⼀定的局限,统计出来的在线⽤户数量可能稍微有点误差。因为我们在以上程序中,是根据⽤户建⽴和退出会话(Session)来实现在线⼈数的加减的,⽽我们知道,如果⽤户没有关闭浏览器,⽽进⼊另外⼀个⽹站,那么,这个会话在⼀定的时间内是不会结束的,这个时间我们可以通过TimeOut来设置,⼀般的,我们设置为20分钟。所以,在⽤户数量统计上⾯,还是存在⼀点误差的。
另外,我们知道,在ASP中,如果⽤户将浏览器上⾯的Cookies设置为“禁⽤”,那么,Session就不能再被传递,显然,这样设置让以上的统计程序⽆能为⼒。不过,在ASP.NET中我们有解决⽅法,在config.web⽂件中,我们将<sessionstate cookieless="false" />设置为true就可以了,也就说,不使⽤Cookies也可以传递Session。这样,我们的程序就可以在不同的访问者环境中顺利运⾏。
四、总结
以上的统计程序特别简单,但是,细节的东西我们不⼀定想到,这也是我们在编程中需要多⼀点考虑的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论