无法从会话存储获取会话

我已经阅读和复制粘贴了很多关于使用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: {} 

当谈到会议时,我是一个新手,所以谢谢你的支持。

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

所以我终于想出了如何解决这个问题。 事实certificate,从套接字ios socket.request.headers.cookie返回的会话标识与从nodejs的req.sessionID返回的会话标识不完全相同。

以下是我在两种情况下获取会话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给我们的东西。 解决scheme: req.cookie['express.sid'].split('.')[0].split(':')[1];