我不明白为什么这种情况发生的原因完全是因为之前完美的工作。Socket.io没有与快递分享会话
我使用下列库:
"express-socket.io-session": "^1.3.2"
"socket.io": "^2.0.3"
"express": "^4.15.4"
"express-session": "^1.15.5"
1 - 我登录通过一个HTTP请求的用户,并发送cookie回前端。 有关http的所有操作与前端后端交换中的cookie完美配合使用。
2 - 用户登录后,在我告诉前台“OK,用户登录,现在连接到插座”:
io (this.url);
下面是相关代码:
var io_session = require("express-socket.io-session");
var e_session = require("express-session");
var sessionFileStore = require('session-file-store')(e_session);
var ee_session = e_session({
store: new sessionFileStore({ path: './user_sessions' }),
secret: "something-random",
resave: true,
saveUninitialized: true
});
var enableCORS = function(req, res, next) {
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Origin, Accept, Content-Type, Authorization, Content-Length, X-Requested-With, *');
res.header('Access-Control-Allow-Credentials',true);
// intercept OPTIONS method
if ('OPTIONS' == req.method) {
res.sendStatus(200);
} else {
next();
};
};
app.use(function(req, res, next) {
///
next();
});
//app.use(cookieParser());
app.use(enableCORS);
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(ee_session);
preparedApp = require("http").Server(app);
var io = require("socket.io")(preparedApp);
io.use(io_session(e_session,{
autoSave: true
}));
preparedApp.listen(8080, function(){});
io.on('connection', function(socket){
var socket_session = socket.handshake.session,
socket_session_id = socket.handshake.sessionID;
console.log("SOCKET_SESSION:",socket_session);
console.log("SOCKET_SESSION_ID:",socket_session_id);
(...)
3 - socket_session
是'空',但是正常http cookie中的所有内容都可以正常工作。会议维持在那里。
有一两件事我注意到的是,socket_session_id
指向一个会话文件不存在的文件夹里面user_sessions。唯一存在的是在http登录中创建的。所以,基本上:
=>用户登录:efihaeif939311kf3f3会话ID文件被创建。
=>插座连接:fiaejgieofaekofek是相同的登录流程会话ID,但文件不user_sessions存在(注意,会话ID是不一样的)
为什么这个任何想法正在发生?我完全不知道。
感谢
'VAR e_session = e_session({...})'是坏的,我的VAR重命名为'session'所以很显然,你不会覆盖进口REF(它实际上可能是来源你问题)。 – James
@詹姆斯已经做到了,但问题依然存在。 – Fane
@詹姆斯没有其他想法?仍然停留:( – Fane