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

hvordan kan jeg få sessioner til at fungere ved hjælp af redis, express &socket.io?

inde i io.configure , skal du forbinde stikket med http-sessionen.

Her er et stykke kode, der uddrager cookien (dette bruger socket.io med xhr-polling , Jeg ved ikke, om dette ville fungere til websocket, selvom jeg formoder, at det ville fungere).

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

Så kan du få adgang til sessionen ved at bruge:

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

Dette har også den ekstra fordel, at det kontrollerer, at der er en gyldig session, så kun dine loggede brugere kan bruge sockets. Du kan dog bruge en anden logik.



  1. Hvordan kan jeg få aktuelt godkendt bruger Principal med fjedersikkerhed og Redis i spring boot-applikation

  2. MongoDB vs. DynamoDB:Hvad du behøver at vide

  3. Opret filteraggregation i foråret

  4. Hvordan forespørges dokumenter ved hjælp af _id felt i Java mongodb driver?