Spec-Zone.ru › Ruby on Rails 5.0

класс ActionDispatch::Session::CookieStore

Родитель:
ActionDispatch::Session::AbstractStore

Этот хранилище сессий на основе файлов cookie является стандартным для Rails. Оно значительно быстрее, чем альтернативные варианты.

Сессии обычно содержат не более идентификатора пользователя и сообщений всплывающего окна; оба помещаются в пределы лимита размера файлов cookie в 4 КБ. Если вы попытаетесь сохранить больше 4 КБ данных, будет поднято исключение CookieOverflow.

Контейнер cookie, используемый для хранения, автоматически настраивается на лучший возможный вариант в зависимости от конфигурации вашего приложения.

Если у вас установлен только secret_token, ваши файлы cookie будут подписаны, но не зашифрованы. Это означает, что пользователь не может изменить свой user_id без знания секретного ключа вашего приложения, но может легко прочитать свой user_id. Это было значением по умолчанию для приложений Rails 3.

Если у вас установлен secret_key_base, ваши файлы cookie будут зашифрованы. Это идёт дальше, чем подписанные файлы cookie, так как зашифрованные файлы cookie не могут быть изменены или прочитаны пользователями. Это значение по умолчанию начиная с Rails 4.

Если у вас установлены secret_token и secret_key_base, ваши файлы cookie будут зашифрованы, и подписанные файлы cookie, сгенерированные Rails 3, будут прозрачно считываться и шифроваться, чтобы обеспечить плавный путь обновления.

Настройте хранилище сессий в файле config/initializers/session_store.rb:

Rails.application.config.session_store :cookie_store, key: '_your_app_session'

Настройте свой секретный ключ в файле config/secrets.yml:

development:
  secret_key_base: 'secret key'

Чтобы сгенерировать секретный ключ для существующего приложения, выполните команду `rails secret`.

Если вы обновляете существующее приложение Rails 3, вы должны оставить ваш существующий secret_token на месте и просто добавить новый secret_key_base. Обратите внимание, что вы должны подождать, чтобы установить secret_key_base, пока не 100% ваших пользователей перейдут на Rails 4 и уверены, что вам не понадобится откат к Rails 3. Это связано с тем, что файлы cookie, подписанные с помощью нового secret_key_base в Rails 4, несовместимы со старыми версиями Rails 3. Вы можете оставить ваш существующий secret_token на месте, не устанавливать новый secret_key_base и игнорировать предупреждения об устаревании до тех пор, пока вы не уверены, что обновление полностью завершено. Кроме того, следует позаботиться о том, чтобы вы не полагались на возможность декодирования подписанных файлов cookie, сгенерированных вашим приложением, во внешних приложениях или JavaScript перед обновлением.

Обратите внимание, что изменение секретного ключа аннулирует все существующие сессии!

Поскольку CookieStore расширяет Rack::Session::Abstract::Persisted, многие параметры, описанные там, могут быть использованы для настройки генерируемого файла cookie сессии. Например:

Rails.application.config.session_store :cookie_store, expire_after: 14.days

установит срок действия файла cookie сессии автоматически через 14 дней после создания. Другие полезные параметры включают :key, :secure и :httponly.

Общедоступные методы класса

new(app, options={}) Показать исходный код
# File actionpack/lib/action_dispatch/middleware/session/cookie_store.rb, line 66
def initialize(app, options={})
  super(app, options.merge!(:cookie_only => true))
end
Вызывает метод суперкласса ActionDispatch::Session::Compatibility.new

Общедоступные методы экземпляра

delete_session(req, session_id, options) Показать исходный код
# File actionpack/lib/action_dispatch/middleware/session/cookie_store.rb, line 70
def delete_session(req, session_id, options)
  new_sid = generate_sid unless options[:drop]
  # Reset hash and Assign the new session id
  req.set_header("action_dispatch.request.unsigned_session_cookie", new_sid ? { "session_id" => new_sid } : {})
  new_sid
end
load_session(req) Показать исходный код
# File actionpack/lib/action_dispatch/middleware/session/cookie_store.rb, line 77
def load_session(req)
  stale_session_check! do
    data = unpacked_cookie_data(req)
    data = persistent_session_id!(data)
    [data["session_id"], data]
  end
end

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API