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

前端之家收集整理的这篇文章主要介绍了javascript – 如何在使用Socket.IO时访问会话标识符?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我聊天,我需要管理独特的连接.我四处搜索,但我发现的解决方案似乎都被弃用了.

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

我正在使用Node.js,Express.jsSocket.IO.

解决方法

使用Socket.IO身份验证设置,并将Cookie传递给Express的cookie解析器中间件.解析cookie后,您可以获取客户端的会话ID,并从会话存储中获取关联的会话,无论是内存故事还是其他类型的存储.
// 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);
});

每次客户端尝试连接时,都会运行授权功能.它需要握手头cookie(handshake.headers.cookies),并将它们传递给express.cookieParser().然后,cookie解析器找到会话ID,然后在商店中搜索关联的会话.然后,我们将关联的会话存储到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
});

猜你在找的JavaScript相关文章