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

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

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

查询单点登陆

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

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

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

做个推送。。所前面用户退出

以前我是透過 對 ip 及 瀏覽器 資訊等等之類 做一個 hash

如果發現 hash 不一樣就登出

这种情况只有websocket的场景能应用的比较好吧

需要把用户登录的session信息记录到数据库,登录时查询是否登录已存在。放cookie肯定不行,cookie只有客户端知道,服务器没有这个信息(只能在客户端请求时被动得到,无法主动查询)。

✨来自Awehunt开源项目精选

如果是用token来做,只有一个token有效就可以了

来自酷炫的 CNodeMD

回到顶部