Question

J'utilise Node.js et exprimer, Socket.IO. J'utilise session Express.

Comment puis-je lire la session et le travail avec lui dans socket.io - dans la partie avec une connexion

store.userid est indéfini.

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

  });

En magasin variable:

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] }
Était-ce utile?

La solution

Je peux me tromper, mais je ne pense pas que vous pouvez (ou devrait) compter sur la session http être renseigné lorsque vous exécutez votre gestionnaire d'événements de connexion. Ils sont en cours d'exécution probable sur différents protocoles, et la session http repose sur le cookie du navigateur (qui Socket.IO peut envoyer quand il fait le vote de XHR, mais probablement pas s'il utilise un « réel » socket).

Je recommande d'avoir vos JS clients vont chercher le cookie (ou au moins l'identifiant de session) en quelque sorte manuellement (soit en allant chercher les cookies à l'aide JS ou si vous voulez écrire sur la page en quelque sorte ... votre choix). Ensuite, lorsque le client fait la connexion, ils peuvent transmettre cette valeur et vous pouvez l'utiliser pour l'associer à la session. Il y a quelques docs sur faire des choses qui dure toute la séance sur la page GitHub; faire une recherche pour "session" ici: https://github.com/learnboost/socket.io

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top