限制用户登录/判断用户在线的问题
2011-01-24 11:05
190 查看
限制用户登录
/
判断用户在线的问题
最近搞个限制多个用户登录的问题,本以为很简单,结果想了很久都没弄出来,在网上也不曾找到答案;后来终于找到了解决的办法,觉得不错,特拿来分享。
解决这个问题有多种方法,思路一是做成长连接形式的,这个思路有多种实现方法,我见过的如服务器推,实现起来挺困难的,我看过相关的一下资料,没有深入研究。
思路二是存数据库,这个方法比较容易想,网上也有。思路就是
ajax
定时刷新,比如隔
1
分钟向数据库插入当前在线时间,自然
user
表里面有个记录当前时间的字段,登录的时候取出字段的值和当前时间比较,超过一分钟就说明下线了,我开始想到的就是这种。很显然这个弊端很大,定时插入数据库有损系统性能,具体代码就不写了。
思路三是存内存,实现方法和思路二差不多,不同的是它存的是内存,本质上没有改变什么,还是要
ajax
定时刷新,区别是给数据库减轻了压力,下面简要的说下方法。
1.
建一个类,定义一个静态集合,用来存放用户名和当前在线时间;
public
class
UserOnline
{
private
static
Dictionary
<int
,
string
> onlineuserlist = null
;
public
static
Dictionary
<int
,
string
> GetOnlineUser()
{
if
(onlineuserlist == null
)
{
onlineuserlist = new
Dictionary
<int
, string
>();
}
return
onlineuserlist;
}
}
2.ajax
定时刷新;
[AjaxPro.AjaxMethod
]
public
int
SetOnlieTime()
{
int
flag = 0;
try
{
Dictionary
<int
, string
>
userlist = UserOnline
.GetOnlineUser();
if
(userlist.ContainsKey(Convert
.ToInt32(Session["userid"
].ToString().Trim())))
{
userlist[Convert
.ToInt32(Session["userid"
].ToString().Trim())]
= DateTime
.Now.AddMinutes(1).ToString("yyyy-MM-dd HH:mm:ss"
);
}
else
{
userlist.Add(Convert
.ToInt32(Session["userid"
].ToString().Trim()),
DateTime
.Now.AddMinutes(1).ToString("yyyy-MM-dd HH:mm:ss"
));
}
flag = 1;
}
catch
{ }
return
flag;
}
3.js
调用上面的
ajax
方法;
function
updatetime()
{
if
(Frameclsss_class1_left.SetOnlieTime().value==1)
{
window.setTimeout("updatetime()"
,60000);
}
else
{
alert('
服務器斷開連接,請檢查你的網絡再訪問!'
);
window.parent.location.href='../../Default.aspx'
;
}
}
<
body
onload
="
updatetime();">
4.
登录时先判断用户名和密码,然后判断时间;
if
(myReader.Read())
{
Dictionary
<int
, string
>
userlist = UserOnline
.GetOnlineUser();
bool
timeflag = false
;
if
(userlist.ContainsKey(Convert
.ToInt32(userid)))
{
timeflag = DateTime
.Now.ToString("yyyy-MM-dd
HH:mm:ss"
).CompareTo(Convert
.ToDateTime(userlist[Convert
.ToInt32(userid)]).ToString("yyyy-MM-dd HH:mm:ss"
)) < 0 ? true
: false
;
}
……
思路四就是用
session
、
application
等,个人觉得用不好,自个试试就知道了。
结束语:这里主要推荐的是第三种方法。觉得存内存这个想法好,很多需要支持大量查询的表,我们都可以建立内存表,直接从内存中读取,想必速度是要快很多的(本文仅供参考,如有误导,还望见谅)
.
/
判断用户在线的问题
最近搞个限制多个用户登录的问题,本以为很简单,结果想了很久都没弄出来,在网上也不曾找到答案;后来终于找到了解决的办法,觉得不错,特拿来分享。
解决这个问题有多种方法,思路一是做成长连接形式的,这个思路有多种实现方法,我见过的如服务器推,实现起来挺困难的,我看过相关的一下资料,没有深入研究。
思路二是存数据库,这个方法比较容易想,网上也有。思路就是
ajax
定时刷新,比如隔
1
分钟向数据库插入当前在线时间,自然
user
表里面有个记录当前时间的字段,登录的时候取出字段的值和当前时间比较,超过一分钟就说明下线了,我开始想到的就是这种。很显然这个弊端很大,定时插入数据库有损系统性能,具体代码就不写了。
思路三是存内存,实现方法和思路二差不多,不同的是它存的是内存,本质上没有改变什么,还是要
ajax
定时刷新,区别是给数据库减轻了压力,下面简要的说下方法。
1.
建一个类,定义一个静态集合,用来存放用户名和当前在线时间;
public
class
UserOnline
{
private
static
Dictionary
<int
,
string
> onlineuserlist = null
;
public
static
Dictionary
<int
,
string
> GetOnlineUser()
{
if
(onlineuserlist == null
)
{
onlineuserlist = new
Dictionary
<int
, string
>();
}
return
onlineuserlist;
}
}
2.ajax
定时刷新;
[AjaxPro.AjaxMethod
]
public
int
SetOnlieTime()
{
int
flag = 0;
try
{
Dictionary
<int
, string
>
userlist = UserOnline
.GetOnlineUser();
if
(userlist.ContainsKey(Convert
.ToInt32(Session["userid"
].ToString().Trim())))
{
userlist[Convert
.ToInt32(Session["userid"
].ToString().Trim())]
= DateTime
.Now.AddMinutes(1).ToString("yyyy-MM-dd HH:mm:ss"
);
}
else
{
userlist.Add(Convert
.ToInt32(Session["userid"
].ToString().Trim()),
DateTime
.Now.AddMinutes(1).ToString("yyyy-MM-dd HH:mm:ss"
));
}
flag = 1;
}
catch
{ }
return
flag;
}
3.js
调用上面的
ajax
方法;
function
updatetime()
{
if
(Frameclsss_class1_left.SetOnlieTime().value==1)
{
window.setTimeout("updatetime()"
,60000);
}
else
{
alert('
服務器斷開連接,請檢查你的網絡再訪問!'
);
window.parent.location.href='../../Default.aspx'
;
}
}
<
body
onload
="
updatetime();">
4.
登录时先判断用户名和密码,然后判断时间;
if
(myReader.Read())
{
Dictionary
<int
, string
>
userlist = UserOnline
.GetOnlineUser();
bool
timeflag = false
;
if
(userlist.ContainsKey(Convert
.ToInt32(userid)))
{
timeflag = DateTime
.Now.ToString("yyyy-MM-dd
HH:mm:ss"
).CompareTo(Convert
.ToDateTime(userlist[Convert
.ToInt32(userid)]).ToString("yyyy-MM-dd HH:mm:ss"
)) < 0 ? true
: false
;
}
……
思路四就是用
session
、
application
等,个人觉得用不好,自个试试就知道了。
结束语:这里主要推荐的是第三种方法。觉得存内存这个想法好,很多需要支持大量查询的表,我们都可以建立内存表,直接从内存中读取,想必速度是要快很多的(本文仅供参考,如有误导,还望见谅)
.
相关文章推荐
- angularjs给Model添加拦截过滤器,路由增加限制,实现用户登录状态判断
- AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
- angularjs给Model添加拦截过滤器,路由增加限制,实现用户登录状态判断
- javaweb查询所有登录的用户,判断是否在线
- java在线聊天项目1.3版设计好友列表框功能补充,因只要用户登录就发送一串新列表,导致不同客户端好友列表不同问题
- 关于判断openfire 服务器中用户的在线状态问题
- eeplat平台开发中限制多个用户同时登录同一个账号的问题解决方案
- ASP.NET 2.0关于用户登录限制问题实例:防止同一用户同时登陆
- AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
- 多点登录限制,禁止单用户多点在线
- javaWeb实现在线用户限制和相同账户多处登录限制
- js 判断用户登录问题。
- 多点登录限制,禁止单用户多点在线
- ASP.NET 2.0关于用户登录限制问题实例
- vsftp是不允许root用户登录的,可以通过修改限制来解决这个问题
- asp.net判断用户是否登录(SetAuthCookie相关问题)
- 预报在线:发送短信中,对用户登录的判断和区分一般信息快报和重大信息快报,以选取不同的sql获取不同的用户;
- asp.net2.0 login控件登录后,判断用户是否在线.
- ASP.NET 2.0关于用户登录限制问题实例:防止同一用户同时登陆
- angularjs给Model添加拦截过滤器,路由增加限制,实现用户登录状态判断