Sento che questo deve essere sepolto da qualche parte nella documentazione, ma non riesco a trovarlo.
Come si chiude o si termina o si uccide (qualunque cosa) una sessione in ExpressJS?
Risposte:
La gestione delle sessioni non è più integrata in Express. Questa risposta si riferisce al modulo di sessione standard: https://github.com/expressjs/session
Per cancellare i dati della sessione, usa semplicemente:
req.session.destroy();
La documentazione è un po 'inutile su questo. Dice:
Distrugge la sessione, rimuovendo req.session, verrà rigenerata la prossima richiesta.
req.session.destroy(function(err) { // cannot access session here })
Ciò non significa che la sessione corrente verrà ricaricata alla richiesta successiva. Significa che una sessione vuota pulita verrà creata nel tuo session store alla prossima richiesta. (Presumibilmente l'ID della sessione non cambia, ma non l'ho testato.)
Non importa, lo è req.session.destroy();
req.session.destroy();
come Acidghost.
La domanda non chiariva quale tipo di archivio sessioni fosse utilizzato. Entrambe le risposte sembrano essere corrette.
Per le sessioni basate sui cookie:
Da http://expressjs.com/api.html#cookieSession
req.session = null // Deletes the cookie.
Per sessioni basate su Redis, ecc .:
req.session.destroy // Deletes the session in the database.
Da http://expressjs.com/api.html#cookieSession
Per cancellare un cookie è sufficiente assegnare la sessione a null prima di rispondere:
req.session = null
uso,
delete req.session.yoursessionname;
Distrugge la sessione e annulla la proprietà req.session. Una volta completato, verrà richiamato il callback.
↓ Modo sicuro ↓ ✅
req.session.destroy((err) => {
res.redirect('/') // will always fire after session is destroyed
})
↓ Modo non sicuro ↓ ❌
req.logout();
res.redirect('/') // can be called before logout is done
Utilizzando req.session = null;
, non verrà effettivamente eliminata l'istanza della sessione. La soluzione più appropriata sarebbe req.session.destroy();
, ma questo è essenzialmente un wrapper perdelete req.session;
.
https://github.com/expressjs/session/blob/master/session/session.js
Session.prototype.destroy = function(fn){
delete this.req.session;
this.req.sessionStore.destroy(this.id, fn);
return this;
};
req.session.destroy();
Quanto sopra non ha funzionato per me, quindi l'ho fatto.
req.session.cookie.expires = new Date().getTime();
Impostando la scadenza del cookie sull'ora corrente, la sessione è scaduta da sola.
Come accennato in diversi punti, non sono nemmeno in grado di far funzionare correttamente la funzione req.session.destroy ().
Questo è il mio lavoro intorno .. sembra fare il trucco, e consente ancora di utilizzare req.flash
req.session = {};
Se elimini o imposti req.session = null; , sembra che non sia possibile utilizzare req.flash