当前位置 : 主页 > 网页制作 > Nodejs >

Node.js – express – session

来源:互联网 收集:自由互联 发布时间:2021-06-16
我使用node.js和express,socket.io. 我在Express中使用session. 如何阅读会话并在socket.io中与他一起工作 – 在连接部分? store.userid未定义. var express = require('express') , stylus = require('stylus') , nib =
我使用node.js和express,socket.io.
我在Express中使用session.

如何阅读会话并在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

  });

在变量商店中:

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] }
我可能是错的,但我不认为你可以(或应该)依赖于在运行连接事件处理程序时填充http会话.它们可能运行在不同的协议上,http会话依赖于浏览器cookie(socket.io可能在进行xhr轮询时发送,但如果它使用’真正的’套接字则可能不会发送).

我建议您的客户端JS以某种方式手动获取cookie(或至少是会话ID)(通过使用JS获取cookie或者如果您想以某种方式将其写入页面…您的选择).然后,当客户端建立连接时,他们可以传递该值,您可以使用它将其与会话关联.有一些关于在github页面上持续所有会话的文档;在这里搜索“会话”:https://github.com/learnboost/socket.io

网友评论