我如何使用快车/连接和会话存储时发现会话ID?

问题描述 投票:24回答:4

如果用户已经登录,并试图在新的情况下再次登录我想它注销其他用户实例。我不希望我的应用程序将被记录在同一用户的两倍。

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

.destroy(sid, callback)

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

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

node.js redis express
4个回答
71
投票

req.sessionID将为您提供该会话的ID,其中REQ是请求对象。


19
投票

对于最近的读者;

自4版连接中间件中不包括快递。

所以为了有req.sessionID工作,必须做到以下几点:

  1. 请确保你有你的package.json内cookie-parser ABD express-session模块。如果它不添加,添加它们:
npm install express-session --save
npm install cookie-parser --save
  1. 要小心的顺序,而在你的app.js文件要求他们,并添加所需的配置参数。
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

15
投票

存储与帐户,当用户在用户帐户呼叫.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}});
       ...
    }
    ...
  }
}

0
投票

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

中号Redis的会话密钥的用户名后没有被命名。

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

© www.soinside.com 2019 - 2024. All rights reserved.