класс ActionDispatch::Session::CookieStore
Этот хранилище сессий на основе файлов cookie является стандартным для Rails. Оно значительно быстрее, чем альтернативные варианты.
Сессии обычно содержат не более что идентификатор пользователя и сообщения всплывающих уведомлений; оба помещаются в лимит размера cookie в 4 КБ. Исключение CookieOverflow генерируется, если вы пытаетесь сохранить более 4 КБ данных.
Контейнер cookie, используемый для хранения, автоматически настраивается как лучший возможный вариант с учетом конфигурации вашего приложения.
Ваши файлы cookie будут зашифрованы с помощью secret_key_base вашего приложения. Это идёт дальше, чем подписанные файлы cookie, так как зашифрованные файлы cookie не могут быть изменены или прочитаны пользователями. Это значение по умолчанию начиная с Rails 4.
Настройте хранилище сессий в инициализаторе:
Rails.application.config.session_store :cookie_store, key: '_your_app_session'
В средах разработки и тестирования базовая ключевая фраза вашего приложения генерируется Rails и сохраняется в временном файле в tmp/development_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.
Публичные методы класса
# File actionpack/lib/action_dispatch/middleware/session/cookie_store.rb, line 50
def initialize(app, options = {})
super(app, options.merge!(cookie_only: true))
end Публичные методы экземпляра
# File actionpack/lib/action_dispatch/middleware/session/cookie_store.rb, line 54
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 # File actionpack/lib/action_dispatch/middleware/session/cookie_store.rb, line 61
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–2019 David Heinemeier Hansson
Licensed under the MIT License.