грабли прерваны! Не знаю, как построить задачу 'db: sessions: clear' (see --tasks) [duplicate]

С консоли вы можете попробовать:

mysqladmin version -u USER -p PASSWD
11
задан Simone Carletti 7 August 2009 в 07:50
поделиться

5 ответов

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

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

8
ответ дан August Lilleaas 20 August 2018 в 14:25
поделиться
  • 1
    Правильно, как я упоминал в своем комментарии, я был под ошибочным впечатлением, что cookie хранит только какой-то токен между клиентом и сервером, и токен также хранится на стороне сервера, чтобы проверить токен или данные находятся на стороне сервера. Временно у меня есть обходной путь в моем коде, чтобы игнорировать сеанс. Возможно, проще всего переключиться на хранилище файлов cookie с поддержкой баз данных для среды разработки (я хочу очистить сеансы только для целей разработки). – user85509 8 August 2009 в 02:15

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

9
ответ дан Joe Van Dyk 20 August 2018 в 14:25
поделиться

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

rake secret

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

SecureRandom.hex(64)

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

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
1
ответ дан lacostenycoder 20 August 2018 в 14:25
поделиться

Если вы используете сеансы на основе Cookie

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

rake secret

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

RAILS_ROOT/config/initializers/session_store.rb

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

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

rake db:sessions:clear

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

rake tmp:sessions:clear
25
ответ дан thekindofme 20 August 2018 в 14:25
поделиться
  • 1
    Мне пришлось скопировать значение в secret_token.rb – Kevin Dewalt 15 July 2013 в 06:49

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

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

3
ответ дан user85509 20 August 2018 в 14:25
поделиться
  • 1
    Изменен файл config.secret_token и перезапустили сервер. Сессии cookie были сброшены. Результат. – patrickmcgraw 11 September 2011 в 04:46
Другие вопросы по тегам:

Похожие вопросы: