Frage

Ich benutze node.js und drücke socket.io aus. Ich verwende die Sitzung in Express.

Wie kann ich die Sitzung lesen und mit ihm in socket.io arbeiten - in dem Teil mit Verbindung?

store.userid ist undefiniert.

var express = require('express')
  , stylus = require('stylus')
  , nib = require('nib')
  , sio = require('socket.io')
  , ejs = require('ejs');

store  = new express.session.MemoryStore;

app.configure(function () {

  app.use(express.bodyParser());
  app.use(express.cookieParser());
  app.use(express.session({ secret: 'secret', store: store }))

  app.use(stylus.middleware({ src: __dirname + '/public', compile: compile }))
  app.use(express.static(__dirname + '/public'));
  app.set('views', __dirname);
  app.set('view engine', 'ejs');

  //disable layout
  app.set("view options", {layout: false});
  });

app.get('/', function(req, res) {

req.session.userid = Math.floor(Math.random()*5000);

});


var io = sio.listen(app)
  , nicknames = {};
io.configure(function () {
  io.set('transports', ['websocket','flashsocket','xhr-polling']);
});


io.sockets.on('connection', function (socket) {

  socket.emit('hello', { hello: store.userid }); //store.userid is undefined

  });

Im Variablenspeicher:

store=

{ sessions: { 'DNHIsZqgk53zbK3xg8qescJK.dUbdgfVq0D70UaLTMGTzO4yx5vVJral2zIhVsfFGnBA': '{"lastAccess":1326317111111,"cookie":{"originalMaxAge":14399999,"expires":"2012-01-12T01:28:17.266Z",
"httpOnly":true,"path":"/"},"userid":3528}' },
  hash: [Function],
  generate: [Function] }

War es hilfreich?

Lösung

Ich könnte mich irren, aber ich glaube nicht, dass Sie sich darauf verlassen können (oder sollten), dass die http-Sitzung beim Ausführen Ihres Verbindungsereignishandlers ausgefüllt wird.Sie werden wahrscheinlich auf verschiedenen Protokollen ausgeführt, und die http-Sitzung basiert auf dem Browser-Cookie (das socket.io möglicherweise sendet, wenn es die xhr-Abfrage durchführt, aber wahrscheinlich nicht, wenn es ein "echtes" verwendet).Steckdose).

Ich würde empfehlen, dass Ihr Client JS das Cookie (oder zumindest die Sitzungs-ID) manuell abruft (entweder durch Abrufen der Cookies mit JS oder wenn Sie es irgendwie auf die Seite schreiben möchten ... nach Ihrer Wahl).Wenn der Client die Verbindung herstellt, kann er diesen Wert weitergeben und Sie können ihn verwenden, um ihn der Sitzung zuzuordnen.Es gibt einige Dokumente zum Ausführen von Aufgaben, die die gesamte Sitzung auf der Github-Seite dauern.Suchen Sie hier nach "Sitzung": https://github.com/learnboost/socket.io

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top