Pregunta

Yo uso Node.js y expreso, Socket.IO. Yo uso la sesión en Express.

¿Cómo puedo leer la sesión y trabajar con él en socket.io - en la parte de conexión

store.userid no está definido.

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 la tienda variables:

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] }
¿Fue útil?

Solución

Podría estar equivocado, pero no creo que se pueda (o debería) se basan en la sesión de http a poblarse cuando se ejecuta el controlador de eventos de conexión. Probablemente se están ejecutando en diferentes protocolos, y la sesión HTTP se basa en la cookie del navegador (que Socket.IO podría enviar cuando se está haciendo el sondeo xhr, pero probablemente no lo hará si está utilizando un 'real' socket).

Yo recomendaría tener sus JS cliente traen la cookie (o al menos el identificador de sesión) manualmente alguna manera (ya sea por ir a buscar las galletas utilizando JS o si desea escribir sobre la página de alguna manera ... su elección). Entonces, cuando el cliente realiza la conexión, pueden pasar ese valor y que pueden usarlo para asociarlo con la sesión. Hay algunos documentos en hacer cosas que dura toda la sesión en la página de GitHub; hacer una búsqueda de "sesión" aquí: https://github.com/learnboost/socket.io

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top