Команда для очистки хранилища сеансов на основе файлов cookie в Rails - PullRequest
11 голосов
/ 07 августа 2009

Я часто хочу очистить хранилище сеансов в Rails, в частности хранилище сеансов по умолчанию на основе файлов cookie. Некоторые сайты, похоже, предполагают, что

rake tmp:sessions:clear

выполняет эту задачу, но, похоже, что нет. Как правильно очистить хранилище сеансов на основе файлов cookie?

Ответы [ 5 ]

25 голосов
/ 04 июля 2013

Если вы используете сеансы на основе файлов cookie

Вы можете изменить secret_token вашего приложения rails. Это сделает недействительными все существующие сеансы.

rake secret

Затем скопируйте значение в

RAILS_ROOT/config/initializers/session_store.rb

Вот и все. Не забудьте перезапустить ваше приложение после этого;)

Если вы используете сеансы на основе базы данных

rake db:sessions:clear

Если вы используете файловые сессии

rake tmp:sessions:clear
9 голосов
/ 16 июня 2011

Изменить имя файла cookie сеанса. Он не удалит старые куки, но заставит всех получить новый сеансовый куки.

8 голосов
/ 07 августа 2009

Проблема в том, что куки являются клиентской стороной. Очевидно, что запуск грабли на вашем сервере не удалит куки на всех машинах, которые посетили веб-страницу.

Возможно, вы можете использовать session.clear в своих контроллерах? Вы правы насчет смены ключа cookie. Это сделает недействительным любой сеанс, принадлежащий старому ключу. Вам придется спасаться от ActionController::StaleSession (или что-то в этом роде), но это сработает.

3 голосов
/ 07 августа 2009

Мне приходит в голову, что то, что я хочу, может оказаться невозможным в зависимости от того, как реализовано хранилище на основе файлов cookie. Если файлы cookie содержат всю информацию, которая необходима серверу (включая подпись для целостности данных), то серверу не нужно хранить какую-либо информацию на своей стороне, поэтому нет способа аннулировать существующие файлы cookie. Я предполагал, что файл cookie содержит некоторый ключ, который соответствует данным на стороне сервера, чтобы убедиться, что файл cookie действителен, но теперь я понимаю, что это может быть не так.

Если это так, то единственный способ очистить куки - это изменить секретный файл cookie на стороне сервера, используемый для подписи, а затем предположительно перезапустить процесс сервера.

1 голос
/ 05 июня 2016

Если вы используете это на рабочем сервере, я рекомендую:

rake secret

Который просто генерирует случайный безопасный токен. Задача rake в основном делает это, что вы можете сделать в консоли.

SecureRandom.hex(64)

Никогда не проверяйте рабочий ключ в системе контроля версий / GIT, а вместо этого используйте переменную среды Так что в вашем config/secrets.yml файле используйте что-то вроде:

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...