Как очистить / уничтожить сессию в рельсах?

Кажется, я нигде не могу его найти ... Как мне удалить / уничтожить / сбросить / очистить / очистить сеанс пользователя в Rails? Не одно значение, а целое.


person tybro0103    schedule 08.03.2010    source источник


Ответы (5)


Чтобы очистить все это, используйте метод reset_session в контроллере.

reset_session

Вот документация по этому методу: http://api.rubyonrails.org/classes/ActionController/Base.html#M000668

Сбрасывает сеанс, очищая все объекты, хранящиеся внутри, и инициализируя новый объект сеанса.

Удачи!

person Gdeglin    schedule 09.03.2010
comment
Для сеансов на основе базы данных (которые, вероятно, вам следует использовать) вы можете истечь с помощью запроса: guides .rubyonrails.org / security.html # session-expiry. - person m33lky; 24.02.2012

сессия в рельсах - это хэш-объект. Следовательно, любая функция, доступная для очистки хэша, будет работать с сессиями.

session.clear

или если необходимо уничтожить определенные ключи:

session.delete(key)

Проверено в рельсах 3.2

добавлено

Люди упомянули session={}, что это плохая идея. Что касается session.clear, Лобати комментирует: похоже, вам, вероятно, лучше использовать reset_session [, чем session.clear], поскольку он выполняет некоторые другие действия по очистке, помимо того, что делает session.clear. На внутреннем уровне person Lavixu    schedule 26.07.2013

comment
У кого-нибудь есть мысли о достоинствах этого метода по сравнению с тем, что рекомендует Гдеглин? - person Peter Berg; 16.01.2014
comment
Это можно использовать, если вы хотите сохранить другие параметры, но удалить одну конкретную пару значений ключа. - person Lavixu; 17.01.2014
comment
Полагаю, я имел в виду использование session.clear или session = {} по сравнению с использованием reset_session. Они идентичны? - person Peter Berg; 17.01.2014
comment
Это вообще не сбросит сеанс, он назначит локальную переменную. Никогда не используйте эту технику для сброса сеанса: session = {} - person alexspeller; 04.02.2014
comment
документация Rails в разделе 5.1 Доступ к сеансу рекомендует использовать reset_session, если вы хотите удалить вставленные скриптом пары ключ / значение (например, что-то, вставленное из контроллера) и сгенерировать новый сеанс. Если вы хотите сбросить только те пары ключ / значение, которые вы установили, установите для этих ключей значение nil. - person sargas; 25.04.2014
comment
Проголосуйте против по той же причине, что упоминает @alexspeller. session = {} ничего не делает, кроме как устанавливает пустую локальную переменную, что создает коварную ошибку в вашем приложении и по-прежнему оставляет сеанс нетронутым. - person lobati; 11.05.2016
comment
@lobati А что насчет еще одной вещи, которую предложил отвечающий, session.clear. Это нормально? В чем именно разница между session.clear и другим ответом reset_session? - person barlop; 03.07.2018
comment
@barlop Похоже, вам, вероятно, лучше использовать reset_session, поскольку он выполняет некоторые другие действия по очистке, помимо того, что делает session.clear. Внутренне, сам вызывает clear а также кое-что другое. - person lobati; 03.07.2018

удалить сеанс пользователя

session.delete(:user_id)
person vjnan369    schedule 25.08.2015
comment
Осторожно, вы можете удалить запись пользователя из базы данных! - person Arthur; 09.10.2017
comment
@Arthur Это неправда. Но вы удалите только ключ: user_id из сеанса, а не весь сеанс - person Andión; 06.03.2018

Чтобы очистить только определенные параметры, вы можете использовать:

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

добавьте этот код в свой ApplicationController

def reset_session
  @_request.reset_session
end

(Не знаю, почему никто выше просто не упомянул этот код, поскольку он устранил мою проблему) http://apidock.com/rails/ActionController/RackDelegation/reset_session.

person David Mesaros    schedule 01.04.2016
comment
Я считаю, что @_request.reset_session и reset_session работают и, может быть, делают одно и то же? - person barlop; 03.07.2018