Spec-Zone.ru › Ruby on Rails 4.1

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

Родитель:
Rack::Session::Abstract::ID
Включенные модули:
ActionDispatch::Session::Compatibility, ActionDispatch::Session::StaleSessionCheck

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

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

Банк 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'

Чтобы сгенерировать секретный ключ для существующего приложения, выполните `rake 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, прежде чем обновлять.

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

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

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

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

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

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

Spec-Zone.ru

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