如何从nodejs express.js中的一个用户帐户管理多个登录的正确方法是啥?

Posted

技术标签:

【中文标题】如何从nodejs express.js中的一个用户帐户管理多个登录的正确方法是啥?【英文标题】:what would be the correct way how to manage multiple logins from one user account in nodejs, express.js?如何从nodejs express.js中的一个用户帐户管理多个登录的正确方法是什么? 【发布时间】:2019-08-29 12:53:55 【问题描述】:

我正在使用 express-session、passport 和 connect-mongo 来保存 mongodb 中的会话。 我的 package.json

 "dependencies":         
        "axios": "^0.18.0",
        "bcrypt": "^3.0.5",
        "body-parser": "^1.18.3",
        "bootstrap": "^4.3.1",
        "chalk": "^2.4.2",
        "chart.js": "^2.8.0",
        "cheerio": "^1.0.0-rc.2",
        "clockwork": "^0.1.4",
        "compression": "^1.7.4",
        "connect-mongo": "^2.0.3",
        "dotenv": "^7.0.0",
        "errorhandler": "^1.5.0",
        "express": "^4.16.4",
        "express-flash": "^0.0.2",
        "express-handlebars": "^3.0.2",
        "express-session": "^1.15.6",
        "express-session-passport-cleanup": "^1.0.3",
        "express-status-monitor": "^1.2.3",
        "express-validator": "^5.3.1",          
        "lastfm": "^0.9.3",
        "lob": "^6.0.5",
        "lodash": "^4.17.11",
        "lusca": "^1.6.1",
        "mongoose": "^5.4.20",
        "morgan": "^1.9.1",
        "multer": "^1.4.1",
        "node-linkedin": "^0.5.6",
        "node-sass": "^4.11.0",
        "node-sass-middleware": "^0.11.0",
        "nodemailer": "^6.0.0",
        "passport": "^0.4.0", 
        "passport-local": "^1.0.0",   
        "pug": "^2.0.3",
        "request": "^2.88.0",
        "stripe": "^6.28.0",           
        "uuid": "^3.3.2",
        "validator": "^10.11.0"
    ,

这可以正常工作,并且可以从同一用户帐户,在同一浏览器中以隐身模式或使用其他浏览器或不同设备进行多次登录,但我不知道管理这个的正确方法是什么。以免在同一用户的会话和购物车存储之间产生错误。

如何处理来自一个用户帐户的多次登录的标准管理方式,我的意思是让会话始终链接到最后更新的数据和商店,这样就不会发生错误。

【问题讨论】:

【参考方案1】:

首先,您必须了解会话如何工作的概念。

会话将一个唯一的标识符存储在客户端(称为“会话ID”)。每次浏览器发出 HTTP 请求(即页面链接或 AJAX 请求)时,都会将此会话 ID 传递给 Web 服务器。 Web 应用程序将传入的会话 ID 与它的内部数据库(redis 等)相匹配,并检索存储的变量以供请求的页面使用。

因此,如果您使用同一帐户登录到不同的浏览器,则存储的会话信息将是唯一的(基于会话 ID)。你不需要担心它。

【讨论】:

感谢您回答@narayansharma91,对不起,如果我解释自己不好,我认为我理解它,但仍然有疑问 1- 对同一用户的多次登录支持有一些标准吗? 2-是否有必要限制用户可以同时登录的会话数?最多我的意思是 3- 如何使会话使用最新的购物车数据? 你的意思是说,如果有人登录到不同的浏览器,你想在两个浏览器上显示购物卡信息对吧? 如果这是我所指的事情之一,但我已经知道该怎么做,另一个是我必须这样做,以便当同一用户的一个活动会话更改密码其他会话无效,快速会话有什么办法处理这个?我可以自己做,删除活动会话,除了更改密码的会话,但我不知道这是否与快速会话冲突,有什么建议吗?谢谢回答

以上是关于如何从nodejs express.js中的一个用户帐户管理多个登录的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

res.render 中的 Express-Node JS 车把模板:如何迭代?

无法使用res.redirect()方法重定向express + NodeJS [重复]

从 html 页面执行 Nodejs 脚本?

在 Express JS 和 NodeJS 中为 jsonp 回调函数添加参数

nodejs教程 安装express及配置app.js文件的详细步骤

使用 express js 和 vuejs 提供不同的本地 json 数据