Ich kann nicht verstehen, warum dies genau passiert, da es perfekt vor arbeitete.Socket.io nicht teilen Sitzungen mit Express
Ich verwende die folgenden Bibliotheken:
"express-socket.io-session": "^1.3.2"
"socket.io": "^2.0.3"
"express": "^4.15.4"
"express-session": "^1.15.5"
1 - ich anmelden, um den Benutzer über eine HTTP-Anfrage und das Cookie zurück an das Frontend senden. Alle Operationen auf http funktionieren perfekt mit dem Cookie im Frontend Backend tauscht.
2 - Nachdem der Benutzer angemeldet ist sagen, dass ich das Frontend "ok, Benutzer angemeldet ist, nun an die Buchsen anschließen":
io (this.url);
Hier ist der relevante Code:
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
ist 'leer', aber alles in den regulären http Cookies funktioniert. Die Sitzung wird dort beibehalten.
Eine Sache, die ich bemerkte, ist, dass socket_session_id
zeigt auf eine Sitzungsdatei , die nicht existiert in dem Ordner user_sessions. Die einzigen, die existieren, werden in der http-Anmeldung erstellt. Also, im Grunde:
=> Benutzeranmeldungen: efihaeif939311kf3f3 Sitzung ID-Datei erstellt.
=> Sockel verbindet: fiaejgieofaekofek ist die Session-ID in dem gleichen Login Fluss aber Datei nicht existiert in user_sessions (beachten Sie, dass die Session-ID ist nicht das Gleiche)
Jede Idee, warum diese es passiert? Ich habe absolut keine Ahnung.
Dank
'var e_session = e_session ({...})' ist schlecht, ich würde die Variable in 'session' umbenennen, also ist es klar und du überschreibst nicht den Importref (es könnte tatsächlich die Quelle deines sein Problem). – James
@James Schon, aber das Problem besteht weiter. – Fane
@James keine andere Idee? Immer noch fest :( – Fane