web-dev-qa-db-ja.com

Rails 3つの追加のセッション構成オプション(key、expires_after、secure)

新しいRails 3.xセッション構成オプションとは何か)を誰かが指摘できますか?

Rails 2.3.xアプリケーションと同じ構成を複製しようとしています。

これは、アプリケーションで使用した構成です。

#environment.rb
config.action_controller.session_store = :active_record_store

config.action_controller.session = {
    :key         => '_something', #non-secure for development
    :secret      => 'really long random string'
  }


# production.rb - override environment.rb for production
config.action_controller.session = {
  :key            => '_something_secure',
  :secret         => 'really long random string',
  :expire_after   => 60*60,#time in seconds
  :secure         => true #The session will now not be sent or received on HTTP requests.
}

ただし、Rails 3.xでは、次の記述しか見つかりません。

AppName::Application.config.session_store :active_record_store

AppName::Application.config.secret_token = 'really long random string'

AppName::Application.config.cookie_secret = 'another really long random string'

キー、expire_after時間、およびセキュアオプションを制御するための他の構成設定はありますか?

後者に関しては、production.rbで「config.force_ssl = true」が設定されている場合、セキュアオプションは不要になったと思いますか?

どうもありがとう!

24
shedd

ここで、おそらくconfig/initializers/session_store.rbで、初期化子を介してCookieベースのセッションストアを構成します。 Rails 3では、セッションストアはミドルウェアの一部であり、構成オプションはconfig.session_storeへの1回の呼び出しで渡されます。

Your::Application.config.session_store :cookie_store, :key => '_session'

:keyを使用して、必要な追加オプションをハッシュに入れることができます。

Your::Application.config.session_store :cookie_store, {
  :key =>           '_session_id',
  :path =>          '/',
  :domain =>        nil,
  :expire_after =>  nil,
  :secure =>        false,
  :httponly =>      true,
  :cookie_only =>   true
}

(これらは単なる標準のデフォルトです)

本番環境でSSLを強制する場合、Cookieにセキュアを設定しても実際には違いはありませんが、安全のために設定することをお勧めします...

Your::Application.config.session_store :cookie_store, {
  :key =>           '_session_id',
  :secure =>        Rails.env.production?
}
40
fidothe