Acho que isso deve estar enterrado em algum lugar da documentação, mas não consigo encontrar.
Como você fecha, encerra ou mata (seja o que for) uma sessão no ExpressJS?
Respostas:
O tratamento de sessão não está mais embutido no Express. Esta resposta se refere ao módulo de sessão padrão: https://github.com/expressjs/session
Para limpar os dados da sessão, basta usar:
req.session.destroy();
A documentação é um pouco inútil nisso. Diz:
Destrói a sessão, removendo req.session, será gerado novamente na próxima solicitação.
req.session.destroy(function(err) { // cannot access session here })
Isso não significa que a sessão atual será recarregada na próxima solicitação. Isso significa que uma sessão limpa e vazia será criada em seu armazenamento de sessão na próxima solicitação. (Presumivelmente, o ID da sessão não está mudando, mas não testei isso.)
Deixa pra lá, é req.session.destroy();
req.session.destroy();
como acidghost.
A pergunta não esclareceu que tipo de armazenamento de sessão estava sendo usado. Ambas as respostas parecem estar corretas.
Para sessões baseadas em cookies:
De http://expressjs.com/api.html#cookieSession
req.session = null // Deletes the cookie.
Para sessões baseadas em Redis, etc:
req.session.destroy // Deletes the session in the database.
De http://expressjs.com/api.html#cookieSession
Para limpar um cookie, basta atribuir a sessão a nulo antes de responder:
req.session = null
usar,
delete req.session.yoursessionname;
Usar req.session = null;
, não excluirá realmente a instância da sessão. A solução mais adequada seria req.session.destroy();
, mas este é essencialmente um invólucro paradelete 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;
};
Destrói a sessão e removerá a definição da propriedade req.session. Depois de concluído, o retorno de chamada será invocado.
↓ Caminho seguro ↓ ✅
req.session.destroy((err) => {
res.redirect('/') // will always fire after session is destroyed
})
↓ Caminho inseguro ↓ ❌
req.logout();
res.redirect('/') // can be called before logout is done
req.session.destroy();
O acima não funcionou para mim, então eu fiz isso.
req.session.cookie.expires = new Date().getTime();
Ao definir a expiração do cookie para a hora atual, a sessão expirou sozinha.
Conforme mencionado em vários lugares, também não consigo fazer a função req.session.destroy () funcionar corretamente.
Esta é a minha solução ... parece funcionar, e ainda permite que req.flash seja usado
req.session = {};
Se você excluir ou definir req.session = null; , parece que você não pode usar req.flash