如何在使用Socket.IO时访问会话标识符?

我有一个聊天,我需要pipe理独特的连接。 我周围search,但我发现的解决scheme似乎都被弃用。

那么,我将如何使用Socket.IO获取套接字的会话ID?

我正在使用Node.js , Express.js和Socket.IO 。

使用Socket.IO身份validation设置,并将cookie传递给Express的cookieparsing器中间件。 一旦cookie被parsing,您可以获取客户端的会话ID,并从会话存储中获取关联的会话,无论是内存故事还是其他types的存储。

// we need to use the same secret for Socket.IO and Express var parseCookie = express.cookieParser(secret); var store = /* your MemoryStore, RedisStore, etc */; io.set('authorization', function(handshake, callback) { if (handshake.headers.cookie) { // pass a req, res, and next as if it were middleware parseCookie(handshake, null, function(err) { handshake.sessionID = handshake.signedCookies['connect.sid']; // or if you don't have signed cookies handshake.sessionID = handshake.cookies['connect.sid']; store.get(handshake.sessionID, function (err, session) { if (err || !session) { // if we cannot grab a session, turn down the connection callback('Session not found.', false); } else { // save the session data and accept the connection handshake.session = session; callback(null, true); } }); }); } else { return callback('No session.', false); } callback(null, true); }); 

每次客户端尝试连接时,都会运行授权function。 它需要握手头cookies( handshake.headers.cookies ),并将它们传递给express.cookieParser() 。 然后,Cookieparsing器find会话ID,然后在storesearch关联的会话。 然后,我们将关联的会话存储到handshake.session ,以便我们可以像这样访问它:

 app.get('/', function(req, res) { req.session.property = 'a value'; }); io.sockets.on('connection', function(socket) { var session = socket.handshake.session; session.property // a value });