node.js - 使用 express-session ,如何控制一个账号,只能有一个登陆实例?
大家讲道理
大家讲道理 2017-04-17 13:42:54
[Node.js讨论组]

我用express-session 中间件保存用户session信息,现在有一个需求我不知道该怎么实现,就是我怎么才能做到同一个账号,我只允许他有一个登陆实例呢。例如账号a登陆了系统,那么账号a在其他浏览器或机器上登陆系统我就把上次一次账号a的session干掉,不知道具体该怎么做?谁能给我一些指点。

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
伊谢尔伦

这里看你怎么存放用户信息了:

express-session

在浏览器 A 上登陆用户 ua ,分配 sid1, 这时你需要将这个 sid1 与你的登陆的用户相关联, 暂时关系假设为

sid1 <-> uida

现在浏览器B上登陆用户 ua, 这个时候又分配了 sid2, 所以你需要查找你存放的对应关系, 并更新

sid2 <-> uida

这样如果浏览器A再访问你的网站, 这时你需要检查对应关系来判断是否已经登陆

个人理解, 没有验证. 推荐使用 redis 来存放对应关系, 这时有2个关系:

key  |  value
sid  |  userinfo
uid  |  sid

访问服务器, 先检查 sid 得到 uid, 然后根据 uid 来得到正确的 sid, 比较2个sid

大家讲道理

express-session 做的工作是给浏览器设置一个 cookie,并在服务端解析 cookie。cookie 的内容是 sid,每个浏览器的都是不同的。

express-session 收到 sid 之后会去匹配对应的记录,匹配到了就登录成功。

你要删除一个用户在一个浏览器上的登录状态,直接在服务器上删除对应 sid 的记录就行。

假设你的 session 里记的是 uid,每次收到一个新的登录请求,就去数据里找一下相同 uid 的记录,然后删除。

这是我的方法,不一定最好,请大家指教。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号