Redis
 sql >> Database >  >> NoSQL >> Redis

come posso far funzionare le sessioni usando redis, express e socket.io?

all'interno di io.configure , devi collegare il socket con la sessione http.

Ecco un pezzo di codice che estrae il cookie (questo sta usando socket.io con xhr-polling , non so se funzionerebbe per websocket, anche se sospetto che funzionerebbe).

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);
  }
});

Quindi puoi accedere alla sessione utilizzando:

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

Questo ha anche il vantaggio aggiuntivo che controlla che ci sia una sessione valida, quindi solo gli utenti che hanno effettuato l'accesso possono utilizzare i socket. Tuttavia, puoi utilizzare una logica diversa.