实现在线用户列表的简单方法

  因最近时间空点,写点个人心得了~,我们经常在程序中要实现显示当前有多少用户在线,以及在线用户的操作状态的功能,看了园子里朋友都有一些非常好的思路,这里我也提供一种很简单的方法:
1, 用户登陆后,在每一次加载新的页面时判断权限(这是常规操作) 的同时,把用户状态写入一张OnlineUser表里,如果发现没有这个用户,就添加进OnlineUser表
2, 在查询当前在线用户时,查询OnlineUser表即可。
3, 用户退出程序时,加删除OnlineUser表中对应用户ID的记录。
4, 用户非正常退出程序时,用DELETE FROM OnlineUser WHERE (DATEDIFF(ss, LastActTime, GETDATE()) > " + GlobalVar.Timeouts * 60 + ")的记录
BasePage中刷新在线用户操作状态的代码如下:
 1 ExpandedBlockStart.gif ContractedBlock.gif /**/ /// <summary>
 2InBlock.gif        /// 刷新在线用户
 3ExpandedBlockEnd.gif        /// </summary>

 4 None.gif          private   void  RefreshOnlineUser()
 5 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {
 6InBlock.gif            string sUserID = Session["UserID"].ToString();
 7InBlock.gif            string sSQL = "";
 8InBlock.gif            sSQL = "SELECT ID FROM OnlineUser WHERE (UserID = '" + sUserID + "')";
 9InBlock.gif            DataTable dt = Query.ProcessSql(sSQL, GlobalVar.DBName);
10InBlock.gif            if (dt.Rows.Count > 0)
11ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
12InBlock.gif                string sID = dt.Rows[0]["ID"].ToString();
13InBlock.gif                sSQL = "UPDATE OnlineUser SET LastActTime = '" + DateTime.Now.ToString() + "' WHERE (ID = '" + sID + "')";
14InBlock.gif                Query.ProcessSql(sSQL, GlobalVar.DBName);
15ExpandedSubBlockEnd.gif            }

16InBlock.gif            else
17ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
18InBlock.gif                OnlineUserEntity sou = new OnlineUserEntity();  //此处用了听棠的SPL来做数据操作,具体可查看听棠.Net BLOG
19InBlock.gif                sou.ID = Guid.NewGuid().ToString();
20InBlock.gif                sou.UserID = sUserID;
21InBlock.gif                sou.IPAddress = Request.UserHostAddress;
22InBlock.gif                sou.Browser = Request.ServerVariables["HTTP_USER_AGENT"].ToString();
23InBlock.gif                sou.StartTime = DateTime.Now;
24InBlock.gif                sou.LastActTime = DateTime.Now;
25InBlock.gif                sou.Save();
26ExpandedSubBlockEnd.gif            }

27InBlock.gif            dt.Dispose();
28InBlock.gif            sSQL = "DELETE FROM OnlineUser WHERE (DATEDIFF(ss, LastActTime, GETDATE()) > " + GlobalVar.Timeouts * 60 + ")";
29InBlock.gif            Query.ProcessSql(sSQL, GlobalVar.DBName);
30ExpandedBlockEnd.gif        }
判断权限函数中部分涉及在线用户的代码:
None.gif if  (Session[ " UserID " ==   null )
ExpandedBlockStart.gifContractedBlock.gif   
dot.gif {
InBlock.gif    
this.ErrorMsg(GlobalVar.PE_LOGIN_TIME_OUT);
ExpandedBlockEnd.gif   }

None.gif   
else
ExpandedBlockStart.gifContractedBlock.gif   
dot.gif {
InBlock.gif    
this.RefreshOnlineUser();
ExpandedBlockEnd.gif   }

None.gif

其中GlobalValTimeouts 为自定义超时时间,GlobalVar.DBName为数据库,Query.ProcessSql是用听棠.Net的SPL持久层。
大家如有不同建议,请提出啊,我下一步想法是用AJAX来实现在线用户列出来。

转载于:https://www.cnblogs.com/zjy/archive/2006/05/23/406898.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值