同一个网站,同一账号,不允许同时同时登录,这个功能怎么做?
发布于 11 小时前 作者 rosencai 141 次浏览 来自 问答

在一个网站下,同一个账号如果已经登录,在另一个客户端登录的时候,提醒账号已登录,禁止当前客户端再次登录,还有session在这种情况下为什么总是空的

//下面是登录成功后创建session,但是在这之前取session,即使已有账号登录,session总是空的,难道要用数据库记录登录状态吗
req.session['admin_id'] = req.body.username;
res.send('登录成功,将跳转至默认页<script>setTimeout(function(){location.href="/admin/classMgmt"},1000)</script>').end();
3 回复

这应该不是单点登录的场景。一般的session是基于cookie的 没登录的时候没有cookie自然session就是空的,你说的情况可以使用websocket,在连接建立的时候用用户名来置标记位,连接断开的时候清除标记位;我觉得最好的做法是账号在异地登录的时候,挤掉当前登录的账号,清空其session,使其重新登录,而不是一个账号登录了以后就不能在别的客户端登录。

  • 数据库里面记录一个登陆的 count 数
  • 登陆的时候增加 count 数,这个登陆的 session 会有一个超时时间
  • 以这个超时时间设置一个任务队列,可以是 rabbitmq ,当然 nodejs 也有队列的库,你搜一下,有两个,具体名字忘记了,超时的时候减一下 count 数。
  • 登陆的时候 check 这个 count 就行了。

看到 https://github.com/agenda/agenda 这个库,试试,流量多还是用 rabbitmq 吧,毕竟 erlang 开发的,分布式支持。

回到顶部