Когда сервер Ruby on Rails переключается на использование хранилища сеансов БД, тогда пользователям необходимо «очистить куки»? - PullRequest
0 голосов
/ 03 марта 2011

Может быть, я могу подвести итог вопроса: если приложение Rails переходит в Техническое обслуживание на 30 минут и хранилище сеансов Rails переключается с использования файлов cookie на использование БД, то любой пользователь, у которого открыт браузер, не сможет использоватьПриложения Rails для любого хранилища сессий, если пользователь не удалит все куки или не перезапустит браузер.Есть ли способ исправить это поведение (потому что пользователи, которые этого не сделали, застрянут и, возможно, разочаруются).


Подробности:

Чтобы лучше понять хранилище сеансов Rails,Я создал новый проект, который сначала использует cookie в качестве хранилища сеансов (используя Rails 2.3.8 с Ruby 1.8.7) ...

, и значения могут храниться в сеансе.и затем, не закрывая браузер, я остановил сервер Rails, удалил # перед

#ActionController::Base.session_store = :active_record_store

и сделал rake db:sessions:create, а затем rake db:migrate (чтобы создать таблицу sessionsв БД).

Но теперь мой браузер никогда не закрывался, и когда я распечатывал переменные сеанса, он не работал, и когда я устанавливал некоторые значения в сеансе, используя FoosController#show,и распечатайте значения сеанса в FoosController#index (в представлении).Хотя значения можно установить в show, они не отображаются в index.Я должен удалить куки в моем браузере (или выйти из браузера и запустить его снова, чтобы значения можно было установить в show, а затем index теперь будет отображаться правильно.

IПредположим, что при смене хранилища сеансов с cookie на БД сервер будет выключен, то есть сайт будет закрыт на несколько минут или пару часов ... но пользователи могут не закрывать браузер в это время... и

1) любые ранее установленные значения сеанса не будут отображать (вероятно, допустимые)
2) любые новые значения сеанса, установленные сервером, теперь также будут не Зайдите в хранилище сеансов пользователя.

Я думаю (1) выше, это нормально, но (2) может свести пользователя с ума ... продолжая попытки в течение 30 минут, и подождите час или два часа спустя, по-прежнему не будет работать (например, не удается войти в систему и прочитать вторую страницу как зарегистрированный пользователь, поскольку session[:user_id] не может быть успешно установлен. Пользователь, вероятно, позвонит в службу технической поддержки, и служба технической поддержки может предложить или не предложить »клирингпеченье "... но это довольно грубый способ что-то исправить.(или перезапустить браузер тоже будет работать ... но у пользователя может быть так много открытых вкладок, что ему действительно нужно пройти через все вкладки и пометить что-нибудь, а затем закрыть и перезапустить браузер.)

Так чтоэто правда для сервера Rails?Или кто-то знает, что более новые версии Rails уже исправили эту проблему?

1 Ответ

2 голосов
/ 06 апреля 2011

Попробуйте изменить secret_token (находится в config / initializers / secret_token.rb в rails 3) при переключении из хранилища cookie в хранилище db. Это фактически сделает недействительными все незавершенные сеансы файлов cookie, в результате чего пользователям будет предложено снова войти в систему (при условии, что в вашем приложении есть такой механизм).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...