expressjs和socket.io会话问题

时间:2014-07-23 03:15:42

标签: node.js express socket.io

我正在使用express和socket.io,我想分享两者之间的快速会话,每个人都在不同的Node实例上(localhost:3000和localhost:8000)。到目前为止,express将创建会话并创建cookie,但socket.io只会选择'io'cookie而不是express cookie。谁可以在这里显示我的错误是?我正在使用express 4.x和socket.io 1.x。

Express config(localhost:3000):

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(localhost:8000):

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();
});

1 个答案:

答案 0 :(得分:0)

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