Jac*_*ack 27 redis node.js express
如果用户已经登录并尝试在新实例中再次登录,我希望它能够注销其他用户实例.我不希望同一个用户在我的应用程序上登录两次.
目前会话存储在Redis存储中,我使用express/connect来处理会话存储.可用于销毁会话的其中一个功能如下:
.destroy(sid, callback)
Run Code Online (Sandbox Code Playgroud)
但是我需要在调用.destroy()之前找到该会话ID.在Redis中,用户名存储为会话的一部分.
问题:是否可以查询Redis以获取基于用户名的会话ID?
Joe*_*e H 73
req.sessionID 将为您提供会话的ID,其中req是请求对象.
sca*_*guy 20
对于最近的读者;
自版本4以来,Express中不包含Connect中间件.
因此,为了完成req.sessionID工作,您必须执行以下操作:
cookie-parserabd express-session模块.如果没有添加,请添加它们:Run Code Online (Sandbox Code Playgroud)npm install express-session --save npm install cookie-parser --save
app.js文件中需要它们时要小心顺序并添加所需的配置参数.Run Code Online (Sandbox Code Playgroud)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 }));
req.sessionID和req.session.id.Jac*_*ack 16
当用户在数据库验证用户帐户调用.destroy(sid,fn)期间登录时,将SID与帐户一起存储,然后使用用户的当前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}});
...
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55833 次 |
| 最近记录: |