首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >expressjs和socket.io会话问题

expressjs和socket.io会话问题
EN

Stack Overflow用户
提问于 2014-07-23 11:15:42
回答 1查看 209关注 0票数 0

我使用express和socket.io,并希望在这两者之间共享express会话,每个会话位于不同的节点实例上(localhost:3000和localhost:8000)。到目前为止,express将创建会话和创建的cookie,但是socket.io只获取'io‘cookie,而不是express cookie。有没有人能告诉我我的错误是什么?我使用的是express 4.x和socket.io 1.x。

快速配置(本地主机:3000):

代码语言:javascript
运行
复制
var cookieParser    = require('cookie-parser')
  , session         = require('express-session')
  , bodyParser      = require('body-parser')
  , express         = require('express')
  , redis           = require('redis')
  , RedisStore      = require('connect-redis')(session);

module.exports = function (app, passport) {

app.use(express.static('./static'))
app.use(cookieParser("thisismynewsecret"));
app.use(session({
    //passport: passport,
    name: 'sid',
    //key: 'express.sid',
    secret: 'thisismynewsecret',
    saveUinitialized: true,
    resave: true,
    store: new RedisStore({ client: redis.createClient() }),
    cookie: {
        httpOnly: true,
        path: '/',
        secure: false
    }
}));
app.use(passport.initialize());
app.use(passport.session());

// all environments
app.set('port', process.env.PORT || 3000)
app.set('views', './views')
app.set('view engine', 'jade')

app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(require('method-override')());
app.use( require('express-subdomain-handler')({ baseUrl: 'localhost', prefix: 'myprefix', logger: true }) );  
}
});

socket.io (本地主机:8000):

代码语言:javascript
运行
复制
var fs              = require('fs');
var session = require('express-session');
var cookie = require('cookie');
var cookieParser = require('cookie-parser');
var sessionStore = require('connect-redis')(session);

var server = require('http').Server(function(req, res) {
  fs.readFile(__dirname + '/views/JAMinit.html', function(error, content) {
if (error) {
  res.writeHead(500);
  res.end();
}
else {
  res.writeHead(200, { 'Content-Type': 'text/html' });
  res.end(content, 'utf-8');
}
 });
}).listen(8000);
var io = require('socket.io')(server);

io.use(function(socket, next) {
var data = socket.handshake || socket.request;

if (data.headers.cookie) {
    data.cookie = cookie.parse(cookieParser.signedCookie(data.headers.cookie, 'thisismynewsecret'));
    console.log(data.cookie);
    console.log('data.cookies ( %s )', JSON.stringify(data.cookie));

    if (data.cookie.sid) {
        data.sid = data.headers.cookie.sid;
        sessionStore.get(data.headers.cookie.sid, function(err, session) {
            data.session = session;
        });
    }
}

next();
});
EN

回答 1

Stack Overflow用户

发布于 2014-07-23 11:50:20

看看express.io,它结合了express和socket.io,并且有automatic session support

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24901241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档