在线人数统计
打开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();
}。
运行效果如下图: