Node.js – 快速会话

我使用node.js和express,socket.io。 我在Express中使用会话。

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

在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] } 

我可能是错的,但我不认为你可以(或应该)在运行连接事件处理程序时依赖于http会话。 他们很可能运行在不同的协议上,而http会话依赖于浏览器cookie(socket.io 可能在进行xhr轮询时发送,但是如果它使用的是“真正的”套接字,则可能不会)。

我build议让你的客户端JS以某种方式手动获取cookie(或者至less是会话id)(或者通过使用JS获取cookie,或者如果你想把它写到页面上,你可以select)。 然后,当客户端build立连接时,他们可以传递该值,并且可以使用它将其与会话相关联。 有一些文档可以在github页面上完成所有会话。 在这里search“会话”: https : //github.com/learnboost/socket.io