我使用的node.js和表达,socket.io。 我在快递使用会话。

如何阅读socket.io会议和工作中与他吗 - 与连接的部分。

store.userid未定义。

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

  });

在变量存储:

商店=

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

解决方案

我可能是错的,但我不认为你可以(或应该)依靠填充HTTP会话当您运行连接事件处理程序。他们在不同的协议可能正在运行,且HTTP会话依赖于浏览器cookie(其中socket.io的可能的发送时,它做XHR轮询,但可能不会,如果它使用一个“真正的”插座)。

我建议您要求客户JS获取饼干(或至少是会话ID)手动不知何故(通过提取使用JS cookies或者,如果你想将其写入网页不知何故要么...你的选择)。然后,当客户端进行连接,他们可以通过这个值了,你可以用它来它与会话相关联。有做的东西,持续GitHub的页面上的所有会议上,一些文档;做“会话”在这里搜索: https://github.com/learnboost/socket.io

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top