Sto provando a utilizzare la funzione di autorizzazione di Socket.IO per ottenere i dati di sessione. Il problema è che anche se disconnetto e distruggo la mia sessione, Socket.IO ha ancora le vecchie informazioni sulla sessione, che chiaramente non sono l'ideale. Qualche idea su cosa sto facendo male nel codice qui sotto?La funzione di autorizzazione Socket.io non sta aggiornando i dati di sessione
io.set('authorization', function (data, accept) {
if(data.headers.cookie) {
data.cookie = parseCookie(data.headers.cookie);
data.sessionID = data.cookie['express.sid'];
app.set('mongo-store').get(data.sessionID, function (err, session) {
console.log(err, session);
if (err || !session) {
// if we cannot grab a session, turn down the connection
accept('Error', false);
} else {
// save the session data and accept the connection
data.session = session;
accept(null, true);
}
});
} else {
return accept('No cookie transmitted.', false);
}
accept(null, true);
});
E qui è il codice di connessione:
io.sockets.on('connection', function(socket) {
var hs = socket.handshake;
console.log('A socket with sessionID ' + hs.sessionID
+ ' connected!');
// setup an inteval that will keep our session fresh
var intervalID = setInterval(function() {
// reload the session (just in case something changed,
// we don't want to override anything, but the age)
// reloading will also ensure we keep an up2date copy
// of the session with our connection.
hs.session.reload(function() {
// "touch" it (resetting maxAge and lastAccess)
// and save it back again.
hs.session.touch().save();
});
}, 60 * 1000);
socket.on('disconnect', function() {
console.log('A socket with sessionID ' + hs.sessionID
+ ' disconnected!');
// clear the socket interval to stop refreshing the session
clearInterval(intervalID);
});
});
+1 Ho lo stesso problema. Anche se il cookie di sessione del client scade o viene eliminato, la connessione Socket.IO ha ancora accesso ai vecchi dati e ritiene che la sessione sia ancora attiva. – dbau