¿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!

Gdeglin
fuente
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.

Lavixu
fuente
¿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)
vjnan369
fuente
¡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) }
vladCovaliov
fuente