|
主题: 如何限制一个帐户同时只能一人在线?
|
 NewSZQ
职务:普通成员
等级:1
金币:0.0
发贴:54
注册:2001/9/10 23:53:00
|
#12005/1/16 13:43:19
也就是说限制每个帐户同一时间只能一个人使用。 以前想过一个办法,用数据库里的某个字段记录用户的在线状态,用户登陆时检测这个 状态,如果是在线,就禁止其上线,如何不在线,则登陆并记录该用户为在线。 难就难在用户离线时的记录,试过在主页面onunload时调用一个asp文件来记录用户的 离线,但是这种方法有时会出现莫名其妙的错误,而且万一用户的电脑死机,就不会调 用onunload,这样该用户就会一直被记录为“在线”,他就无法再登陆了。也试过session, 但是这种方法无法实时记录用户的状态。 各位兄弟,有什么解决思路或方法吗?
|
 { 在指尖上绽放的花朵 }
职务:普通成员
等级:5
金币:14.0
发贴:3209
注册:2002/7/25 21:24:11
|
#22005/1/16 22:53:20
用数据库里面的一个字段记录用户的Session,并每隔一个时间段检查Session的存在。
如果Session不存在了。。则说明该用户离线。。。。
|
 NewSZQ
职务:普通成员
等级:1
金币:0.0
发贴:54
注册:2001/9/10 23:53:00
|
#32005/1/16 23:33:55
Session有个时间延迟,设的长,用户退出,Session不一定马上结束,就无法马上再登录进去,设的时间短,则很有可能用户什么事都还没干,就被踢出了。
我试过在主页面关闭时调用一个asp文件来手动结束Session,但是有时会出现无法结束的情况。
|
 蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
注册:2001/12/20 15:57:57
|
#42005/1/17 13:39:10
可以定一个离线时间,如果用户超过时间限制没有活动,就算离线了。
非常大鱼
|
 Aleuxander
职务:普通成员
等级:1
金币:1.0
发贴:20
注册:2004/12/20 17:24:52
|
#52005/1/26 18:55:39
Session可能解决不了真正的问题,我的做法是,设置一个在线用户表,里面登记用户的用户名、IP地址、特征字符串及最后操作的时间,如果某用户上线,首先查这个表内有没有他的用户名,如果有,就先把它删除,然后重新登记这个用户的IP地址、特征字符串等内容,这样原来登记的就作废了,这种办法可以保证同时只有一个人在用!
|
 { 在指尖上绽放的花朵 }
职务:普通成员
等级:5
金币:14.0
发贴:3209
注册:2002/7/25 21:24:11
|
#62005/1/26 22:07:23
Aleuxander在上个帖子中说 引用: Session可能解决不了真正的问题,我的做法是,设置一个在线用户表,里面登记用户的用户名、IP地址、特征字符串及最后操作的时间,如果某用户上线,首先查这个表内有没有他的用户名,如果有,就先把它删除,然后重新登记这个用户的IP地址、特征字符串等内容,这样原来登记的就作废了,这种办法可以保证同时只有一个人在用!
我不太明白?可否详细些说明? 假设情景: 用户A IP: 192.168.1.2 拥有账号:IamA 用户B IP: 192.168.1.3 拥有账号:IamB 用户 A 使用账号 IamA 上线。。。表里面没有 A 的数据。。添加之。。产生特征字符串 UserA。。 在这个时候如果用户B试图也用 IamA 同时上线。。。 这时会发生什么情况呢?
|
 蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
注册:2001/12/20 15:57:57
|
#72005/1/26 22:10:41
用数据表更准确些,并且查询记录比较方便,但多次查询对服务器是种开销。如果简单的记录信息,并且网站流量不是很大,也考虑采用Application存储在线信息,并且速度也很快。
非常大鱼
|
 蓝鲸
职务:版主
等级:5
金币:42.1
发贴:2614
注册:2001/12/20 15:57:57
|
#82005/1/26 22:23:11
可能是这样,假设A用户登录后,即在表中记录A用户的IP及其它信息。如果B用户也试图登录,但IP地址与A记录中的登录IP不同,因此判断IP是否相同,即可决定是否可以登录了。 每二个IP以相同的帐号,只能等超时或自动退出后,才能登录。
不过,这种方法可能还是无法在网吧等相同IP的机子上限止吧。
如果是网吧等这种情况,是否可以考虑用COOKIE等产生一ID码,判断Cookie的特定码和IP地址可能更有效些。
非常大鱼
|
 Aleuxander
职务:普通成员
等级:1
金币:1.0
发贴:20
注册:2004/12/20 17:24:52
|
#92005/1/27 9:08:47
在局域网里面会有一些小问题,不过没什么,除非两个人串通好共用一个帐号!我们可在某用户登录成功后,不判断“在线用户数据表”中有没有这个用户的登记记录,直接删除原来在“线用户数据表”中的该用户的登记记录,然后形成新的特征字串,这样,在此之前登录成功过的用户就全部是“非法用户”了。 还是“蓝鲸”的办法好,“用COOKIE等产生一ID码,判断Cookie的特定码和IP地址”,这样,就连两个人想串通都不大可能了!
|