CNode

同一个网站,同一账号,不允许同时同时登录,这个功能怎么做?

问答
Rrosencai发布于8 年前最后回复8 年前9 回复9322 浏览0 收藏

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

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

回复 (9)

B
bluelovers#1·8 年前

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

如果發現 hash 不一樣就登出

W
wangchaoduo#2·8 年前

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

V
vendar#3·8 年前

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

✨来自Awehunt开源项目精选

L
luanxuechao#4·8 年前

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

来自酷炫的 CNodeMD

L
LeoChowChina#5·8 年前

查询单点登陆

P
ProfutW#6·8 年前

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

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

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

C
CodeofGame#8·8 年前

20170520150850288.jpg

J
jianyeruan80#9·8 年前

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

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