¿Cómo vaciar / destruir una sesión en rieles?


Respuestas:


203

Para borrar todo esto, use el método reset_session en un controlador.

reset_session

Aquí está la documentación sobre este método: http://api.rubyonrails.org/classes/ActionController/Base.html#M000668

Restablece la sesión borrando todos los objetos almacenados e inicializando un nuevo objeto de sesión.

¡Buena suerte!


1
Para las sesiones basadas en la base de datos (que probablemente debería usar), puede caducar mediante una consulta: guides.rubyonrails.org/security.html#session-expiry
m33lky

44

sesión en rails es un objeto hash. Por lo tanto, cualquier función disponible para borrar hash funcionará con sesiones.

session.clear

o si se deben destruir claves específicas:

session.delete(key)

Probado en rieles 3.2

adicional

La gente ha mencionado que session={}es una mala idea. Al respecto session.clear, Lobati comenta: Parece que probablemente sea mejor usar reset_session [que session.clear], ya que hace alguna otra limpieza más allá de lo que hace session.clear. Internamente, reset_session llama a session.destroy , que a su vez llama a clear y algunas otras cosas.


¿Alguien tiene alguna idea sobre los méritos de este método frente al recomendado por Gdeglin?
Peter Berg

3
Esto se puede usar cuando desea retener otros parámetros pero eliminar un par de valores clave en particular.
Lavixu

1
Esto no restablecerá la sesión, asignará una variable local. Nunca use esta técnica para restablecer la sesión: session = {}
alexspeller

44
La documentación de Rails , en la sección 5.1 Acceso a la sesión, recomienda usar reset_session si desea eliminar pares clave / valor insertados por script (por ejemplo: algo insertado desde un controlador) y generar una nueva sesión. Si desea restablecer solo los pares clave / valor que establezca, establezca esas claves en cero.
sargas

1
@barlop Parece que probablemente sea mejor usarlo reset_session, ya que realiza algunas otras tareas de limpieza más allá de lo que session.clearhace. Internamente, reset_sessionllamadassession.destroy , que a su vez también llama a clearotras cosas .
lobati

6

para eliminar la sesión de un usuario

session.delete(:user_id)

¡Cuidado, puede eliminar el registro de usuario de la base de datos!
Arthur

2
@ Arthur Eso no es cierto. Pero solo eliminará la clave: user_id de la sesión y no toda la sesión
Andión

5

Para borrar solo ciertos parámetros, puede usar:

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.