Node.js 使用express/connect和会话存储时如何查找会话Id?

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 否。

如果一个用户已经登录并尝试在新实例中再次登录,我希望它注销另一个用户实例。我不希望同一用户在我的应用程序上登录两次

目前会话存储在Redis存储中,我使用express/connect来处理会话存储。可用于销毁会话的可用功能之一如下:

.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
工作,您必须执行以下操作:

  • 确保package.json中有
    cookie解析器
    abd
    express 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
    }));