Como terminar uma sessão no ExpressJS


88

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:


121

Resposta atualizada do Express 4.x

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.)


existe uma maneira de destruir a sessão das sessões e não da solicitação imediata. Por exemplo, se eu fosse implementar a funcionalidade de logoff de todos os dispositivos, eu precisaria disso
Muhammad Umer

1
@MuhammadUmer Pelo que eu sei, não existe um mecanismo embutido para destruir uma sessão arbitrária. Você pode implementar isso facilmente, excluindo do armazenamento as chaves associadas à sessão ou criando seu próprio wrapper de sessão.
Brad

92

Deixa pra lá, é req.session.destroy();


8
Isso não está funcionando para mim no expresso 3 .. Estou tentando ligar para ´req.session.destroy () ´
acidghost

6
Está funcionando bem para mim no ExpressJS 3.00. Usado req.session.destroy();como acidghost.
hexacianida

1
o uso de req.session.destroy () também funciona para mim no expresso 2.5
TulioPa

1
Onde isso está documentado? Estou tentando encontrar.
abraço de

24

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.

1
req.session.destroy é essencialmente um wrapper para "delete req.session", consulte o código-fonte aqui: github.com/expressjs/session/blob/master/session/session.js
tfmontague


6

usar,

delete req.session.yoursessionname;

Eu realmente gostaria de ver um documento sobre isso.
Preguiçoso,

5
Para todos aqueles que votaram contra @Nithin; o método de função session.destroy () documentado no github (github.com/expressjs/session/blob/master/session/session.js) usa "delete this.req.session" - não é exatamente a resposta do @Nithin, mas usar "deletar" também é uma solução correta (e não abordada em outras respostas).
tfmontague

Esta é a solução adequada? Sem vazamento de memória, qualquer coisa perniciosa não vai acontecer certo?
Rajath


4

Session.destroy (callback)

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

0
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.


-5

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


1
Este é um problema de segurança, uma vez que não altera o hash da sessão
Tosh
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.