首页 新闻 会员 周边 捐助

一个账号不能同时登陆,同时登陆挤掉前一位登录者

0
悬赏园豆:50 [已关闭问题]

怎么实现一个账号不能同时登陆,同时登陆挤掉前一位登录者

胡佳180815的主页 胡佳180815 | 初学一级 | 园豆:140
提问于:2010-04-09 10:46
< >
分享
其他回答(6)
0

维持一个登陆列表。

forhells | 园豆:724 (小虾三级) | 2010-04-09 12:28
0

接楼上的,需要有一张表存放用户登陆状态,或者说在你目前的用户信息表中加一个登陆状态存储字段,用户账号登陆后就存储登陆状态,用户退出后就更改状态,当下一位用户使用同一个账户登录时先判定用户是否登录,如果已经登录,就清除掉前一位登陆用户...

西越泽 | 园豆:10775 (专家六级) | 2010-04-09 12:53
0

服务端

维护一个登陆用户的列表,需要由一个唯一的标示:

如:userID ,GUID(唯一标示),lastupdatetime

用户登陆的时候:先检测列列表,如果userid存在的话,将这一列删掉

之后:

生成一个GUID,并且将GUID写到cookie里面去。

 

客户端:

ajax轮询,没几秒钟将当前用户信息(userid,guid发到服务器),如果信息不在集合里面(同时跟新状态),则提示掉线,关闭浏览器或直接跳出。

 

这只是大概思路,怎么做都行,如果不用及时通知的话,不用ajax轮询也可以,节约资源,不过这样不能够及时跟新用户状态

状态维护问题:

客户段可能会关闭浏览器,或者直接停电,当时服务端记录了用户还是登陆者的,这样就会出现问题。我们可以在body的onunload事件里面回调删除记录,但是页面之间的跳转就会出现问题的。

ajax轮询的时候,跟新列lastupdatetime,如果lastupdate列长时间的没有更新,那就可以当成掉线,不过轮询太占用资源,不知道优美更好的办法

LittlePeng | 园豆:3445 (老鸟四级) | 2010-04-09 13:10
0

LS 的应该可以给你些意见

我给你个思路   

 用户登陆后    创建个随机码,加上用户的ID ,保存到 cookies  

 数据库中用户表  放两个字段,分别保存随机码和用户登陆时间 

 前台 用js 一直更新 数据库中的 用户登陆时间,并判断cookie内的 随机码和数据库中是否一直

 随机码不一致或者本地时间和数据库的时间差别超过一定时间  则将 该机子的用户cookie设置过期。

 表示当前用户登出  或者 其他用户登录该账户

  

clound | 园豆:481 (菜鸟二级) | 2010-04-09 18:21
0

 

应该就是 单点登录吧

万雅虎 | 园豆:328 (菜鸟二级) | 2010-04-19 15:31
0
小AI | 园豆:354 (菜鸟二级) | 2010-04-21 18:30
0

引用第N楼,在登录成功后调用方法对数据库查询一下数据库当前值,如果还登录呢就把他断掉就行了,然后下一个同账号登录一样,这样就可以实现来回挤。。。

天涯已可 | 园豆:202 (菜鸟二级) | 2016-12-07 16:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册