关闭

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

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

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

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

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

   
else
   
{
    
this.RefreshOnlineUser();
   }


其中GlobalValTimeouts 为自定义超时时间,GlobalVar.DBName为数据库,Query.ProcessSql是用听棠.Net的SPL持久层。

http://zjy.cnblogs.com/archive/2006/05/23/406898.html


大家如有不同建议,请提出啊,我下一步想法是用AJAX来实现在线用户列出来。
0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2257863次
    • 积分:25815
    • 等级:
    • 排名:第228名
    • 原创:1篇
    • 转载:1662篇
    • 译文:0篇
    • 评论:98条
    最新评论