sql >> Base de Datos >  >> NoSQL >> Redis

¿Cómo puedo hacer que las sesiones funcionen con redis, express y socket.io?

dentro de io.configure , debe vincular el socket con la sesión http.

Aquí hay un fragmento de código que extrae la cookie (Esto está usando socket.io con xhr-polling , no sé si esto funcionaría para websocket, aunque sospecho que funcionaría).

var cookie = require('cookie');
var connect = require('connect');

var sessionStore = new RedisStore({
  client: redis // the redis client
});

socketio.set('authorization', function(data, cb) {
  if (data.headers.cookie) {
    var sessionCookie = cookie.parse(data.headers.cookie);
    var sessionID = connect.utils.parseSignedCookie(sessionCookie['connect.sid'], secret);
    sessionStore.get(sessionID, function(err, session) {
      if (err || !session) {
        cb('Error', false);
      } else {
        data.session = session;
        data.sessionID = sessionID;
        cb(null, true);
      }
    });
  } else {
    cb('No cookie', false);
  }
});

Luego puede acceder a la sesión usando:

socket.on("selector", function(data, reply) {
  var session = this.handshake.session;
  ...
}

Esto también tiene el beneficio adicional de que verifica que haya una sesión válida, por lo que solo los usuarios registrados pueden usar sockets. Sin embargo, puedes usar una lógica diferente.