web-dev-qa-db-ja.com

Rails / deviseはcookieセッションをどのように処理しますか?

Rails/deviseでユーザーをサインインするときに実際に何が起こっているのかを理解したいと思います。

最小限のRailsアプリ、インストール済みのデバイスを作成し、Userデバイスモデルを作成しました。すべて正常に機能し、ログインすると(remember meを使用して)I期待どおりにセッションCookieを取得します。

ここで私を悩ませているのは次のとおりです。Railsは、ブラウザがCookieを通過しているセッション情報をどのように処理しますか?

一部の情報がデータベースに格納されることを単純に期待しますが、どこにあるのかわかりません。 sessionテーブルのようなものはなく、Usersにはセッション列がなく、tmpディレクトリーに興味のあるものが見つかりませんでした。

サーバーを再起動してもセッションは終了しません。もちろん予想されることですが、ここでどんな魔法が起こっているのか本当に気になります。

つまり、サーバーはどのようにCookieの有効性をチェックしてユーザーを認証するのでしょうか。

よろしくお願いします!

22
aherve

デフォルトのRailsセッションストレージはCookieStoreです。これは、すべてのセッションデータがデータベースではなくCookieに保存されることを意味します。Rails 3.2 Cookie改ざんを防止するために署名されていますが、暗号化されていません。Rails 4では、通常、デフォルトで暗号化されています。Cookie内にあるという事実は、サーバーの再起動後も保持される方法です。また、 4kのデータのみを保存し、そこに機密性の高いものをRails <4.に保存する必要はありません。とにかく、セッション内のデータを最小限に抑えることをお勧めします。

また、セッションデータをデータベースに保存し、セッションIDのみをCookieに含めることもできます。

先週お伝えしたこの回答には、役に立つと思われる追加情報がいくつかあります。

セッションについては、オンラインで読み始める前に理解できました

また、Rails CookieStoreのapi docは、素晴らしい要約を提供します:

http://api.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.html

19
Tim