本菜鸟实现在线用户列表的简单方法
2006-05-27 20:49
766 查看
因最近时间空点,写点个人心得了~,我们经常在程序中要实现显示当前有多少用户在线,以及在线用户的操作状态的功能,看了园子里朋友都有一些非常好的思路,这里我也提供一种很简单的方法:
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来实现在线用户列出来。
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来实现在线用户列出来。
相关文章推荐
- 本菜鸟实现在线用户列表的简单方法
- 实现在线用户列表的简单方法
- [原创]jsp实现在线用户列表方法
- ASP.NET中在线用户统计的简单实现及讨论
- 菜鸟初学android体验之——实现自定义简单标题栏的两种简单方法
- 使用each方法实现简单的下拉列表联动
- Web应用中防止用户重复登录的简单实现方法
- Ext 在线实时聊天系统的开发,有源码包,实现了实时更新在线用户列表和群聊
- HuaXinIM聊项目优化(在线用户列表实现在线更新)
- 使用Application和SessionID实现在线用户列表统计
- 菜鸟学习Spring——60s配置XML方法实现简单AOP
- Web应用中防止用户重复登录的简单实现方法
- C# 最简单实现文件附件在线预览的方法
- ASP.NET中在线用户统计的简单实现及讨论
- session、application事件监听器实现在线用户列表
- 在线用户统计的实现方法
- 第五天 CSDN (复习、聊天室、实现在线用户列表)
- 【Remoting】.Net remoting方法实现简单的在线升级(下篇:重启exe)
- 采用python实现简单QQ单用户机器人的方法
- asp 实现同一帐号,防止多人同时登录、获取在线列表、实现登录日志(可用户统计在线时长),适合用户访问量大的系统