Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Wie kann ich Sitzungen mit redis, express &socket.io zum Laufen bringen?

innerhalb der io.configure , müssen Sie den Socket mit der http-Session verknüpfen.

Hier ist ein Codestück, das das Cookie extrahiert (Dies verwendet socket.io mit xhr-polling , ich weiß nicht, ob dies für Websocket funktionieren würde, obwohl ich vermute, dass es funktionieren würde).

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

Dann können Sie auf die Sitzung zugreifen mit:

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

Dies hat auch den zusätzlichen Vorteil, dass überprüft wird, ob eine gültige Sitzung vorhanden ist, sodass nur Ihre angemeldeten Benutzer Sockets verwenden können. Sie können jedoch eine andere Logik verwenden.