Node.js 使用express/connect和会话存储时如何查找会话Id?
如果一个用户已经登录并尝试在新实例中再次登录,我希望它注销另一个用户实例。我不希望同一用户在我的应用程序上登录两次 目前会话存储在Redis存储中,我使用express/connect来处理会话存储。可用于销毁会话的可用功能之一如下:Node.js 使用express/connect和会话存储时如何查找会话Id?,node.js,redis,express,Node.js,Redis,Express,如果一个用户已经登录并尝试在新实例中再次登录,我希望它注销另一个用户实例。我不希望同一用户在我的应用程序上登录两次 目前会话存储在Redis存储中,我使用express/connect来处理会话存储。可用于销毁会话的可用功能之一如下: .destroy(sid, callback) 但是,我需要在调用.destroy()之前找到该会话id。在Redis中,用户名存储为会话的一部分 问题:是否可以查询Redis以根据用户名获取会话id? 问题:是否可以查询Redis以根据用户名获取会话id 否。
.destroy(sid, callback)
但是,我需要在调用.destroy()之前找到该会话id。在Redis中,用户名存储为会话的一部分
问题:是否可以查询Redis以根据用户名获取会话id?
问题:是否可以查询Redis以根据用户名获取会话id
否。redis中的会话密钥不是以用户名命名的
不过,这里有一个想法:当一个已经登录的用户尝试再次登录时,您在应用程序中难道看不到这一点,并且立即销毁旧会话,或者不允许他们再次登录吗?当用户在用户帐户调用的数据库验证期间登录时,将SID与帐户一起存储。destroy(SID,fn),然后用用户的当前SID更新数据库中的SID 在我使用MongoDB的情况下,我就是这样做的:
app.post('/login', function(req, res)
{
var sid = req.sessionID;
var username = req.body.user;
var password = req.body.pass;
users.findOne({username : username, password : password}, function(err, result)
{
...
sessionStore.destroy(result.session, function(){
...
users.update({_id: result._id}, {$set:{"session" : sid}});
...
}
...
}
}
req.sessionID
将为您提供会话ID,其中req是一个请求对象。对于最近的读者
自版本4起,Express中不包括Connect中间件
因此,为了进行req.sessionID
工作,您必须执行以下操作:
cookie解析器
abdexpress session
模块。如果未添加,请添加它们:app.js
文件中需要它们时,请注意顺序,并添加所需的配置参数为什么这不是公认的答案?这对我很有用。谢谢这对我没用<代码>请求会话ID是未定义的。NodeJS 9.x、express 4、express session 1.15.Use req.session.idcookie-parser在1.5.0版本的express session中被弃用(请参阅上的自述)。事实上,cookie解析器现在可能会产生副作用。
npm install express-session --save
npm install cookie-parser --save
var cookieParser = require('cookie-parser');
var session = require('express-session')
app.use(cookieParser());
app.use(session({
secret: '34SDgsdgspxxxxxxxdfsG', // just a long random string
resave: false,
saveUninitialized: true
}));