Spec-Zone.ru › Ruby on Rails 5.2

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

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

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

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

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

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

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

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

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

По умолчанию ваш секретный ключ base выводится из имени вашего приложения в тестовой и эталонной средах. Во всех других средах он хранится зашифрованным в файле config/credentials.yml.enc.

Если ваше приложение не было обновлено до значений по умолчанию Rails 5.2, secret_key_base будет найден в старом файле config/secrets.yml.

Обратите внимание, что изменение 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 54
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 58
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 65
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