在线人数统计

打开VS,新建项目--ASP.NET Web应用程序

在Global.asax里面Application_Start事件(网站启动时)添加如下代码,实现创建一个用户的DataTable来保存每个访问网站的用户的信息。

protected void Application_Start(object sender, EventArgs e)
{
#region OnlineUsers 创建一个DataTable来保存每个访问网站的用户的信息
try
{
DataTable userTable = new DataTable();
userTable.Columns.Add("SessionID");
userTable.Columns.Add("UserIP");
userTable.Columns.Add("Browser");
userTable.Columns.Add("OSName");

userTable.AcceptChanges(); // 提交自上次调用 System.Data.DataTable.AcceptChanges() 以来对该表进行的所有更改
Application.Lock();
Application["OnlineUsers"] = userTable;
Application.UnLock();
}
catch
{ }
#endregion
}

一个用户访问网站时会触发Session_Start事件。当用户访问网站时,严格地讲应该是一个客户端浏览器访问网站时,在Session_Start中记录下该用户的客户端信息,存于userTable中:

protected void Session_Start(object sender, EventArgs e)
{
#region 当一个客户端浏览器访问网站时,在Session_Start中记录下该用户的客户端信息,存入userTable中
try
{
string seesionid = Session.SessionID;
string UserIP = Request.UserHostAddress;
HttpBrowserCapabilities bc = Request.Browser;
string OSName = "Win2000";
switch (bc.Platform)//判断操作系统
{
case "WinNT 5.1":
case "WinXP":
OSName = "Windows XP";
break;
case "WinNT 5.0":
OSName = "Win2000";
break;
case "WinNT":
OSName = "Win2003";
break;
default:
OSName = bc.Platform;
break;
}
string Browser = bc.Type;
DataTable userTable = (DataTable)Application["OnlineUsers"];
if (userTable == null)
return;
DataRow[] curRow = userTable.Select("SessionID=' " + seesionid + " ' ");
if (curRow.Length == 0)
{
DataRow newRow = userTable.NewRow();
newRow["SessionID"] = seesionid;
newRow["UserIP"] = UserIP;
newRow["Browser"] = Browser;
newRow["OSName"] = OSName;
userTable.Rows.Add(newRow);
userTable.AcceptChanges();
Application.Lock();
Application["OnlineUsers"] = userTable;
Application.UnLock();
//由于每个用户访问都会触发该事件,最终 Application["OnlineUsers"] 将保存所有访问该网站的用户的信息
}
}
catch
{ }
#endregion
}

由于每个用户在访问时都会触发该事件,最终Application["OnlineUsers"] 将保存所以访问该网站的用户的信息。

protected void Session_End(object sender, EventArgs e)
{
Hashtable OnlineUsersHash = (Hashtable)Application["OnlineUsers"];
OnlineUsersHash.Remove(Request.UserHostAddress);
try
{
string seesionid = Session.SessionID;//获取当前SessionID
DataTable userTable = (DataTable)Application["OnlineUsers"];
if (userTable == null)
return;
foreach (DataRow row in userTable.Select("SessionID=' " + seesionid + " ' "))
{
userTable.Rows.Remove(row);//移除该session
}
userTable.AcceptChanges();
Application.Lock();
Application["OnlineUsers"] = userTable;
Application.UnLock();
}
catch
{ }
}

 

显示用户表信息:新建一个页面,然后拖一个GridView控件永远显示用户列表信息,在页面中添加如下代码:

DataTable userTable = null;
try
{
userTable = (DataTable)Application["OnlineUsers"];
}
catch
{
Response.Write("获取内存在线数据失败");
}
if (userTable != null)
{
GridView1.DataSource = userTable;
GridView1.DataBind();
}。

运行效果如下图:

posted @ 2012-11-10 11:08  Devin0613  阅读(149)  评论(0编辑  收藏  举报