【问题标题】:Unable to get session from session store无法从会话存储中获取会话
【发布时间】:2014-09-13 06:16:40
【问题描述】:

我已经阅读并复制了很多关于在 socket.io、express 和会话存储中使用会话的示例。但是,每次我打电话给sessionStore.get()(或sessionStore.load())时,我得到的都是undefined。为什么?

这是我的代码(简化):

var app = require('express')(),
    session = require('session'),    
    MongoStore = require('connect-mongostore')(session);

app.use(session({
    store: new MongoStore({ 'db': 'sessions' });
}));

io.use(function(socket, next) {
    var req = socket.request,
        reqCookie = cookie.parse(req.headers.cookie),
        sessid = reqCookie['connect.sid']; // == actual session ID

    sessionStore.get(sessid, function(err, session) {
        err // == undefined
        session // == undefined
    });
    next() ;
});

我也尝试使用session.MemoryStore 代替connect-mongostore,结果相同。我修改了 node_modules/express-session/session/memory.js 尝试注销 sessionStore 中的会话:

MemoryStore.prototype.get = function(sid, fn){
  var self = this;    
  console.log(self.sessions); // Output: {}

在会议等方面我是新手,所以感谢您对我的包容。

更新:我已经在两个不同的系统和网络上尝试了代码,但仍然得到相同的结果。

【问题讨论】:

    标签: node.js session express socket.io socket.io-1.0


    【解决方案1】:

    所以我终于想出了如何解决这个问题。原来socket ios socket.request.headers.cookie返回的session id和nodejs'req.sessionID返回的session id并不完全相同。

    这是我在这两种情况下获取会话 ID 的方法,以及它们返回的示例。

    正常的http请求

    app.get('/', function(req, res) {
        req.sessionID; // == LMKJxTssmDgf8IxwijbC9G6LtDBuTQWX
    
    });
    

    Socket.io

    io.use(function(socket, next) {
    
        var req = socket.request;
    
        if (req.headers.cookie) {
            req.cookie = cookie.parse(req.headers.cookie);
    
            req.cookie['express.sid']; // == s:LMKJxTssmDgf8IxwijbC9G6LtDBuTQWX.ApVkBxAEf4o3Pdgo0PWDRHi+GvBaSdcK7q1pO4xslZ0
    

    如您所见,会话 id 在这两种情况下都存在,我们只需要删除 socket.io 给我们的那个上的一些东西。 解决方案: req.cookie['express.sid'].split('.')[0].split(':')[1];.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 2023-03-09
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多