如何在使用express/connect和会话存储时查找会话ID?

问题描述:

如果用户已经登录,并尝试重新登录在一个新的实例,我想它注销其他用户实例。我不希望同一用户在我的应用程序中登录两次。如何在使用express/connect和会话存储时查找会话ID?

目前会话存储在Redis的店,我使用的快递/连接处理会话存储。其中一个可能被用来破坏会话中可用的功能如下:

.destroy(sid, callback) 

不过,我需要找到会话ID之前,我打电话.destroy()。在Redis中,用户名被存储为会话的一部分。

问:是否可以查询Redis的获取基于用户名会话ID?

req.sessionID将为您提供该会话的SID。

+2

这是为什么不接受的答案? 适合我。谢谢! – 2014-09-22 13:49:00

问:是否可以通过查询Redis来获取基于用户名的会话ID?

否。redis中的会话密钥不是以用户名命名的。

这里有一个想法,但:当一个用户已经登录尝试再次登录,你不能看到的是,在你的应用程序,并且立即销毁旧的会话,或者不允许他们再次登录吗?

当用户在用户帐户调用.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}}); 
     ... 
    } 
    ... 
    } 
} 

对于最近读者;因为第4版

连接中间件不包括在快速所以为了有req.sessionID工作必须做到以下几点:

  1. 确保你有你的package.json内cookie-parser ABD express-session模块。如果它不添加,添加它们:
npm install express-session --save 
npm install cookie-parser --save 
  1. 注意有关订单,而在你的app.js文件要求他们,并添加所需的配置参数。
  2. 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 
    })); 
    
    1. 现在你应该使用req.sessionIDreq.session.id
    开始=>
开始=“2”>
+2

cookie-parser已被弃用于1.5.0的快速会话(请参阅https://github.com/expressjs/session上的自述文件)。事实上,cookie解析器现在可以导致副作用。 – YiddishNinja 2016-08-09 21:07:21