CNode

请问如何禁止一个用户账号同时在不同的客户端登录

问答
Yyuzhouzhong发布于11 年前最后回复11 年前8 回复7542 浏览0 收藏

用node做了一个登陆页面,用了session做拦截器。但要禁止一个用户账号同时在不同的客户端登录,只有监视每一个连接的用户账号,如果发现一个新连接的用户账号跟某个已经存在的连接的用户账号相同,则自动将前一个终止。 我想法是在数据库建立一张表,存放已登录用户的用户名、物理地址、Session id等信息,每次登陆时去数据库中验证账号是否已经提前登陆了。但是问题是我不知道如何根据物理地址把退出信息发送给客户端,是不是可以用socket.io。还有这种方法由于需要验证数据库效率很低 nodejs中有没有其他的类似监听器的方法。 谢谢。

查看回复

回复 (8)

E
eyblog#1·11 年前

每次登录根据产生一个token,存到session里面。。同时清除session里面之前的token,然后用之前token那个帐号就掉线了。不知道对不对

L
loulech#2·11 年前
引用 eyblog每次登录根据产生一个token,存到session里面。。同时清除session里面之前的token,然后用之前token那个帐号就掉线了。不知道对不对

@eyblog 这样做挺好的,数据库验证的确效率有些低,不如用无状态http+token将session存入memcached,失效时间,但是可能会有中间人攻击的漏洞。

A
AntSworD#3·11 年前

登录和T掉参考第一条,如果原登录状态要提示可以用socket,或者加flag标记客户端轮询状态

F
fengliner#4·11 年前

同意@eyblog ,每次手动登录生成一个token,存到session里面,并根据token去查找用户。 用另一个客户端登录时会重新生成token,之前那个客户端的token就会失效

H
hezedu#5·11 年前

登录时查session库,看有没有这个人

Y
yuzhouzhong#6·11 年前

十分感谢。没弄过token我研究研究。

Q
qinyang912#7·11 年前

记录每次用户登录产生的sessionID,如果在新的地方登录,则用新的session覆盖之前的session

H
hanyuzhou2006#8·11 年前

简而言之,你除了要维护session->user,还需要维护user->session。

参与回复
登录后即可参与回复。登录