node + express限制用户异地/多处登陆问题方案
后端:Node + Express框架
前端:Vue框架
实现功能:
限制同一用户在不同浏览器登陆,解释如下:
例如用户A在PcA处以用户名user进行了登陆,用户B在PcB处以用户名user进行登陆时,浏览器提示用户”user已在另一处登陆,是否踢其下线?”
此时,用户B选择是,则用户A提示下线,用户B上线
当前方案:
利用express-session:用户A登陆后,用户名和密码保存于session和cookie中(session做永久化处理,存储于mongo数据库中),用户B登陆时在数据库中查询是否有user用户,如果有则返回是否踢用户A下线的提示,用户B选择是,则后端主动过期用户A的cookie
我的问题:
- 限制同一用户在不同浏览器登陆的功能,利用session这个方案是否合理?
- 我理解每个浏览器向后端发送请求后,都会形成相应的session保存起来,查询session数据一般是怎样实现的?例如,怎样查询包含”user“的session的”id“
- 怎样实现后端主动向前端发起请求?比如用户A未向后端发起请求的情况下,后端直接修改用户A的cookie,使之过期?
- 如果方案不合理,还请指点,感谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
楼主的问题
store.destroy(sid, callback)
。怎么限制同个用户不能多个地方同时登录
实现思路楼主应该是有的,只是实现细节不清楚:
楼主不清除的应该是,怎么把 用户名、session id关联起来,包括怎么在有用户名的情况下,查询到该用户名对应的session。
如果用
express-session
,可以这么实现。genid选项:生成session id
genid
返回的是session对应的id,楼主根据实际情况进行自定义。session检测
用户再次登录,通过session id 去检测session是否存在,以此判断用户是否已登录。
嗯,表示登陆然后呢?怎么班这个时候是不是主动想服务端发送不请求,核心功能不知道scoket.io有没有了解,如果要实现这个功能就要实时监听服务端session id的状态! 我觉得我的提醒可以让你将这篇文章写的更好一些!