2016-12-19 5 views
1


https://www.npmjs.com/package/express-socket.io-session을 사용하여 socket.io와 express 사이의 세션을 동기화합니다.
그러나 socket.io (예를 들어)를 통해 세션을 설정하면 express로 액세스 할 수 없습니다. undefinedreq.session.foo이 있습니다.
어떻게 해결할 수 있습니까? 뭐가 문제 야?
은 다음과 같습니다 app.js의 내 코드 : 그것은 당신의 문제를 해결하기 때문에 NodeJS, 소켓 IO 세션 및 익스프레스 세션

+0

doc에 따르면, 당신은'socket.handshake.foo'가 아니라'socket.handshake.session.foo'에 접근해야합니다. – jfriend00

+0

사실 사실, 나는 내 주제에 만족하지 못했다. 그러나 이것과 같은 문제 –

+0

과거에 이것을 시도했을 때 수정을 유지하려면'session.save()'가 필요했습니다. – jfriend00

답변

0

// Requires 
 

 
global.config = require("./config.js"); 
 
var express = require("express"); 
 
var session = require("express-session"); 
 
global.sha1 = require("sha1"); 
 
global.moment = require("moment"); 
 
var rhandler = require("./handler.js"); 
 
global.mySQL = require("./mysql.js"); 
 
var entities = new require("html-entities").XmlEntities; 
 
global.Users = {}; 
 

 
var app  = express(); 
 
var server  = require("http").createServer(app).listen(config.server.port); 
 
global.Handler = new rhandler(); 
 

 
app.set("view engine", "ejs"); 
 
app.use("/assets", express.static("public")); 
 

 
var socketIO = require("socket.io"); 
 
var io  = socketIO.listen(server); 
 

 
var session = require("express-session")({ 
 
    secret: config.express.secret, 
 
    resave: true, 
 
    saveUninitialized: true 
 
}); 
 
var sharedsession = require("express-socket.io-session"); 
 

 
// Use express-session middleware for express 
 
app.use(session); 
 

 
// Use shared session middleware for socket.io 
 
// setting autoSave:true 
 
io.use(sharedsession(session, { 
 
    autoSave:true 
 
})); 
 

 
io.sockets.on("connection", function(socket) { 
 
    socket.on("login", function(obj, callback) { 
 
     socket.handshake.session.test = "test"; 
 
    }); 
 
}); 
 

 
app.get("/", function(req, res) { 
 
    console.log(req.session.test); 
 
    res.end(); 
 
});
이 대답에 내 의견을 만들기.

문서에 따르면 socket.handshake.foo이 아닌 socket.handshake.session.foo에 액세스해야합니다.

세션 수정을 유지하기 위해 세션을 수정 한 후에 socket.handshake.session.save()을 추가해야합니다.