Railsとセッションに関する「ベストプラクティス」のヒントはありますか?Rails 3のデフォルトのセッションタイプはまだCookieStoreですよね?私はしばらくSqlSessionStoreを使用し、それはうまく機能しましたが、CookieStoreを支持してそれから離れることができます。
塩漬けの情報であっても、機密情報にCookieStoreを使用することはまだ良い考えではありませんか、それともDBに保存する方がよいでしょうか。
Railsとセッションに関する「ベストプラクティス」のヒントはありますか?Rails 3のデフォルトのセッションタイプはまだCookieStoreですよね?私はしばらくSqlSessionStoreを使用し、それはうまく機能しましたが、CookieStoreを支持してそれから離れることができます。
塩漬けの情報であっても、機密情報にCookieStoreを使用することはまだ良い考えではありませんか、それともDBに保存する方がよいでしょうか。
回答:
機密性の高い情報を保存するために使用すべきではないCookieベースのデフォルトの代わりに、セッションにデータベースを使用します
でセッションテーブルを作成します
rake db:sessions:create
移行を実行する
rake db:migrate
また、セッションの管理にもActiveRecordを使用するようにrailsに指示するようにしてください。
config / initializers / session_store.rb:
Rails.application.config.session_store :active_record_store
config / environment.rb:
config.action_controller.session_store = :active_record_store
rake db:sessions:create
は、Rails 4で非推奨になり、削除されました。これは、ユーザー数が多い(データベースの読み取りと書き込みが多すぎる)アプリケーションでは適切に拡張できないためです。rails 4.0、rake db:sessions:createを参照してください。
Rails 4では、CookieStore Cookieはデフォルトで暗号化され、署名されています。
secret_token
設定しただけの場合、Cookieは署名されますが、暗号化されません。つまり、ユーザーはuser_id
アプリの秘密鍵を知らずにユーザーを変更することはできませんが、簡単に読み取ることができます。user_id
。これはRails3アプリのデフォルトでした。
secret_key_base
設定している場合、Cookieは暗号化されます。これは、暗号化されたCookieをユーザーが変更したり読み取ったりすることができないという点で、署名されたCookieよりも一歩進んだものです。これは、Rails4以降のデフォルトです。あなたが両方を持っている場合
secret_token
とsecret_key_base
のセットを、あなたのクッキーは暗号化され、3レールによって生成された署名付きクッキーは透過的に読み、スムーズなアップグレードパスを提供するために、暗号化されます。
この回答は、Rails 4に関しては古くなっています。アクティブレコードセッションストアは非推奨になり、Railsから削除されたため、次のジェネレーターは機能しなくなります。
rake db:sessions:create
rails generate session_migration
これはこの回答で指摘されました。Active Record Session Storeが非推奨になった理由は、このブログ投稿で述べられているように、アプリケーションにアクセスするユーザーが多数いる場合、データベースへの読み取り/書き込みが適切にスケーリングされないためです。
... Active Recordセッションストアの大きな問題の1つは、スケーラブルではないことです。それはあなたのデータベースに不必要な負荷をかけます。アプリケーションが大量のトラフィックを受信すると、セッションデータベーステーブルは継続的に読み取り/書き込み操作で攻撃されます。
Rails 4の時点で、Active Recordセッションストアはコアフレームワークから削除され、非推奨になりました。
それでもActiveRecord Session Storeを使用したい場合は、gemとして引き続き利用できます。
Ruby on Railsセッションの最新のベストプラクティスについては、Ruby onRailsセキュリティガイドの最新バージョンを確認することをお勧めします。
FWIW、レール3.1はランニングを提案します
rails generate session_migration
ただし、これにより、とまったく同じ移行が生成されます。
rake db:sessions:create
db:sessions:create
はsession_migration
ジェネレーターを直接呼び出すようになりました。task:create =>:environmentは、ActiveRecord :: Base.connection.supports_migrationsを除いて、「このデータベースではタスクを利用できません(移行サポートなし)」を発生させますか?'rails / generators'が必要ですRails :: Generators.configure!require'rails / generators / rails / session_migration / session_migration_generator 'Rails :: Generators :: SessionMigrationGenerator.start [ENV ["MIGRATION"] || "add_sessions_table"]終了
rake db:sessions:create
そしてrails generate session_migration
、彼らは多くのユーザー(あまりにも多くのデータベースは読み取りおよび書き込み)を使用したアプリケーションのためにうまく拡張しないため、発電機は、レール4で非推奨となり、削除されます。rails 4.0、rake db:sessions:createを参照してください。