使用Application和SessionID实现在线用户列表统计

Application是一个共享对象,意味着所有访问此应用程序的客户均可以看到这个Application对象的值。使用Application和SessionID来统计当前在线人数。

代码
   
     
<% @ Application Language = " C# " %>

< script runat = " server " >

void Application_Start( object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
System.Data.DataTable onlineUser = new System.Data.DataTable();
onlineUser.Columns.Add(
" SessionID " );
onlineUser.Columns.Add(
" userIP " );
onlineUser.Columns.Add(
" browser " );
onlineUser.Columns.Add(
" osName " );
onlineUser.AcceptChanges();
Application.Lock();
Application[
" onlineUser " ] = onlineUser;
Application.UnLock();
}

void Application_End( object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码

}

void Application_Error( object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码

}

void Session_Start( object sender, EventArgs e)
{
// 在新会话启动时运行的代码
string sessionID = Session.SessionID;
string userIP = Request.UserHostAddress;
HttpBrowserCapabilities bc
= Request.Browser;
string osName = bc.Platform;
string browser = bc.Type;
System.Data.DataTable userDt
= Application[ " onlineUser " ] as System.Data.DataTable;
if (userDt == null )
{
return ;
}
System.Data.DataRow[] currentRow
= userDt.Select( " SessionID=' " + sessionID + " ' " );
if (currentRow.Length <= 0 )
{
// 当前用户没有在线
System.Data.DataRow newRow = userDt.NewRow();
newRow[
" SessionID " ] = sessionID;
newRow[
" userIP " ] = userIP;
newRow[
" browser " ] = browser;
newRow[
" osName " ] = osName;
userDt.Rows.Add(newRow);
userDt.AcceptChanges();
Application.Lock();
Application[
" onlineUser " ] = userDt;
Application.UnLock();

}

}

void Session_End( object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
string sessionID = Session.SessionID;

System.Data.DataTable userDt
= Application[ " onlineUser " ] as System.Data.DataTable;
if (userDt == null )
{
return ;
}
foreach (System.Data.DataRow dr in userDt.Select( " SessionID=' " + sessionID + " ' " ))
{
userDt.Rows.Remove(dr);
}
userDt.AcceptChanges();
Application.Lock();
Application[
" onlineUser " ] = userDt;
Application.UnLock();

}

</ script >

还有一篇博文,通过Application和SessionID保证一个帐号只有一个在线http://www.cnblogs.com/heaiping/archive/2010/01/19/1651835.html

你可能感兴趣的:(application)