У нас есть приложение Rails, которое связывается с приложением для iPhone на основе PhoneGap.Мы находимся в процессе обновления приложения Rails с Rails 2.3.5 до 3. Из-за некоторых проблем, заставляющих PhoneGap хорошо работать с файлами cookie Rails, приложение Rails (предварительное обновление) было настроено с :cookie_only
, установленным в false:
ActionController::Base.session = {
:key => '_our_key',
:secret => 'ourreallyreallylongsecret',
:cookie_only => false
}
Эта конфигурация была переведена для Rails 3 следующим образом:
OurApp::Application.config.session_store :cookie_store, :key => '_our_key'
OurApp::Application.config.secret_token = 'ourreallyreallylongsecret'
Проблема в том, что я не могу понять, как использовать опцию :cookie_only
в Rails 3. Теперь,Я понимаю, что установка :cookie_only
в false - действительно плохая идея и приводит к неприятным эксплойтам по фиксации сессии.Мы, безусловно, планируем исправить это в будущем.Однако существующее приложение для iPhone полагается на это поведение, чтобы функционировать вообще.Поэтому мне нужно, чтобы приложение iPhone работало в течение короткого времени, пока мы пересматриваем сессионные приложения iPhone.
Глядя на исходный код Rails для CookieStore
, похоже, что они действительно этого не делают.хотим, чтобы мы больше могли использовать эту опцию:
def initialize(app, options = {})
super(app, options.merge!(:cookie_only => true))
freeze
end
Мы обезьяны исправили источник Rails для слияния в :cookie_only => false
, что не сработало.Мы даже зашли так далеко, что просто установили @cookie_only = false
в методе AbstractStore
initilize
, но его просто проигнорировали.Кажется, что реализация CookieStore
больше не чтит @cookie_only
.
Неужели нет никакого способа использовать эту функциональность в Rails 3?Любая помощь будет принята с благодарностью.