sql >> Databasteknik >  >> NoSQL >> Redis

hur kan jag få sessioner att fungera med redis, express &socket.io?

inuti io.configure , måste du länka uttaget med http-sessionen.

Här är en bit kod som extraherar cookien (denna använder socket.io med xhr-polling , Jag vet inte om detta skulle fungera för websocket, även om jag misstänker att det skulle fungera).

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

Sedan kan du komma åt sessionen med:

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

Detta har också den extra fördelen att det kontrollerar att det finns en giltig session, så att endast dina inloggade användare kan använda sockets. Du kan dock använda en annan logik.



  1. Microservices Architecture för mycket frekvent dataåtkomst; i minneslösningar?

  2. Kan kommandot redis incr begränsas till ett specifikt antal?

  3. Hur man installerar NodeJS med MongoDB på Ubuntu

  4. BadValue Ogiltigt eller ingen användarspråk inställd. Se till att miljövariablerna LANG och/eller LC_* är korrekt inställda