统计在线用户的作用不言而喻,就是为了网站管理者可以知道当前用户的多少,然后根据用户数量来观察服务器或者程序的性能,从而可以直观的了解到网站的吸引力或者网站程序的效率。现在,我们就介绍一个简单明了的方法来统计在线用户的多少,该方法的特点就是充分的利用了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")减一。这样,就很巧妙的实现了在线用户的统计。
谢谢!你所说的用户数量统计我早已经实现 了。用户列表没有实现!
我也只会用asp的方法!
鄙视你!
copy我也会
你用用脑子看看人家问的什么!
带星就可以随便整些垃圾出来!
我穿一个绿裤衩的鄙视你两个星的!
由它来管客户端
希望你的客户端同意安装你的控件:P
msn 留一下也行!
protected void Session_Start(Object sender, EventArgs e)
{
//Session["user"] = "jianyi";
Application.Lock();
Application["visitorCount"] = 1+ (int)Application["visitorCount"] ;
Application.UnLock(); if( (bool)Application["trackVisitorInfo"] )
{
DataTable visitorInfoTable = createXmlDB.createVisitorInfoTable();
DataRow row = visitorInfoTable.NewRow(); row["sessionID"] = Session.SessionID; row["uName"] = ""; row["time"] = DateTime.Now; row["IP"] = Request.UserHostAddress ; row["language"] = Request.UserLanguages[0]; row["browerType"] = Request.Browser.Type; row["OSType"] = Request.Browser.Platform; visitorInfoTable.Rows.Add( row ); } }
protected void Session_End(Object sender, EventArgs e)
{
////online users
///
Application.Lock();
if( Session["user"] != null )
{
DataTable onUserTable = (DataTable)Application["onUser"];
DataRow[] rows = onUserTable.Select("uName='" + Session["user"].ToString() + "'");
if( rows.Length > 0 )
{
rows[0].Delete();
Application["onUserCount"] = (int)Application["onUserCount"] - 1;
}
} Application["visitorCount"] = (int)Application["visitorCount"] - 1 ; Application.UnLock();
////
///
if( (bool)Application["trackVisitorInof"] )
{
DataTable visitorInfoTable = createXmlDB.createVisitorInfoTable();
DataRow[] rows = visitorInfoTable.Select( "sessionID='" + Session.SessionID + "'" ); if( rows.Length > 0 ) rows[0].Delete();
}
}
--------------以上是一个论坛程序的部分代码,其中createXmlDB.createVisitorInfoTable()是一个静态方法,建立内存中的用户信息表。