Redis
 sql >> Baza danych >  >> NoSQL >> Redis

jak mogę uruchomić sesje za pomocą redis, express i socket.io?

wewnątrz io.configure , musisz połączyć gniazdo z sesją http.

Oto fragment kodu, który wyodrębnia plik cookie (używa się to przy użyciu socket.io z xhr-polling , nie wiem, czy to zadziała dla websocket, chociaż podejrzewam, że zadziała).

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

Następnie możesz uzyskać dostęp do sesji za pomocą:

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

Ma to również tę dodatkową zaletę, że sprawdza, czy istnieje poprawna sesja, więc tylko zalogowani użytkownicy mogą korzystać z gniazd. Możesz jednak użyć innej logiki.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ustaw klucz/wartość redis za pomocą camel-redis

  2. Wyłącz przezroczyste duże strony z Kubernetes

  3. Ciągi znaków Redis a skróty Redis reprezentujące JSON:wydajność?

  4. Połączenie odrzucone dla Redis na Heroku

  5. Czy istnieje sposób na zlokalizowanie określonego klucza w określonej instancji Redis w trybie klastra?