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

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

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
<% @ 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值