Como esvaziar / destruir uma sessão em trilhos?


Respostas:


203

Para limpar tudo, use o método reset_session em um controlador.

reset_session

Aqui está a documentação sobre este método: http://api.rubyonrails.org/classes/ActionController/Base.html#M000668

Redefine a sessão limpando todos os objetos armazenados e inicializando um novo objeto de sessão.

Boa sorte!


1
Para sessões baseadas em banco de dados (que você provavelmente deve usar) pode expirar através de uma consulta: guides.rubyonrails.org/security.html#session-expiry
m33lky

44

a sessão nos trilhos é um objeto hash. Portanto, qualquer função disponível para limpar o hash funcionará com as sessões.

session.clear

ou se chaves específicas tiverem que ser destruídas:

session.delete(key)

Testado nos trilhos 3.2

adicionado

As pessoas mencionaram por session={}é uma má ideia. A respeito session.clear, Lobati comenta - Parece que você provavelmente está melhor usando reset_session [do que session.clear], como ele faz algumas outras limpezas além do que o session.clear faz. Internamente, reset_session chama session.destroy , que por si só chama claro, além de outras coisas.


Alguém tem alguma opinião sobre os méritos deste método versus o recomendado por Gdeglin?
Peter Berg

3
Isso pode ser usado quando você deseja manter outros parâmetros, mas exclui um par de valores-chave em particular.
Lavixu 17/01

1
Isso não redefinirá a sessão, ele atribuirá uma variável local. Nunca use esta técnica para redefinir a sessão: session = {}
alexspeller

4
A documentação do Rails , na seção 5.1 . Se você deseja redefinir apenas os pares de chave / valor definidos, defina essas chaves como nulas.
Sargas

1
@ Barlop Parece que você provavelmente está melhor usando reset_session, como faz algumas outras limpezas além do que session.clearacontece. Internamente, as reset_sessionchamadassession.destroy , que também chamam de clearoutras coisas .
lobati

6

excluir a sessão de um usuário

session.delete(:user_id)

Cuidado, você pode excluir o registro do usuário do banco de dados!
Arthur

2
@ Arthur Isso não é verdade. Mas você excluirá apenas a chave: user_id da sessão e não a sessão inteira #
Andión

5

Para limpar apenas determinados parâmetros, você pode usar:

[:param1, :param2, :param3].each { |k| session.delete(k) }

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.