Spec-Zone.ru › Ruby on Rails 7.1

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

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

Хранилище сессий Cookie

Это хранилище сессий на основе cookie — по умолчанию в Rails. Оно значительно быстрее альтернатив.

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

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

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

Настройте хранилище сессий в инициализаторе:

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

В средах разработки и тестирования secret_key_base вашего приложения генерируется Rails и хранится в временном файле в tmp/local_secret.txt. Во всех остальных средах он хранится зашифрованным в файле 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, и :same_site.

Публичные методы класса

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

Публичные методы экземпляра

delete_session(req, session_id, options) Показать исходный код
# File actionpack/lib/action_dispatch/middleware/session/cookie_store.rb, line 69
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.public_id } : {})
  new_sid
end
load_session(req) Показать исходный код
# File actionpack/lib/action_dispatch/middleware/session/cookie_store.rb, line 76
def load_session(req)
  stale_session_check! do
    data = unpacked_cookie_data(req)
    data = persistent_session_id!(data)
    [Rack::Session::SessionId.new(data["session_id"]), data]
  end
end

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

Spec-Zone.ru

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