Redis
 sql >> Base de données >  >> NoSQL >> Redis

comment puis-je faire fonctionner les sessions en utilisant redis, express et socket.io ?

à l'intérieur du io.configure , vous devez lier le socket à la session http.

Voici un morceau de code qui extrait le cookie (ceci utilise socket.io avec xhr-polling , je ne sais pas si cela fonctionnerait pour websocket, bien que je soupçonne que cela fonctionnerait).

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

Ensuite, vous pouvez accéder à la session en utilisant :

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

Cela a également l'avantage supplémentaire de vérifier qu'il existe une session valide, de sorte que seuls vos utilisateurs connectés peuvent utiliser les sockets. Vous pouvez cependant utiliser une logique différente.