同一个网站,同一账号,不允许同时同时登录,这个功能怎么做?
在一个网站下,同一个账号如果已经登录,在另一个客户端登录的时候,提醒账号已登录,禁止当前客户端再次登录,还有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只有客户端知道,服务器没有这个信息(只能在客户端请求时被动得到,无法主动查询)。
如果是用token来做,只有一个token有效就可以了
来自酷炫的 CNodeMD