0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

sessionとは

Posted at

sessionとは

Railsアプリケーションは、ユーザーごとにセッションを設定します。前のリクエストの情報を次のリクエストでも利用するためにセッションに少量のデータが保存されます。セッションはコントローラとビューでのみ利用できます。

アプリケーションはセッションを用いて、多くのユーザーがアプリケーションとやりとりできるようにしつつ、各ユーザー固有のステートを維持します。たとえばセッションを用いることで、ユーザーが認証されれば以後のリクエストでサインインしたままにできます。

多くのアプリケーションでは、アプリケーションを操作するユーザーのステート(状態)を追跡する必要があります。ショッピングサイトの買い物カゴや、現在ログインしているユーザーのidなどがこれに該当します。このようなユーザー固有のステートはセッションに保存できます。

Railsは、アプリケーションにアクセスするユーザーごとにセッションオブジェクトを1つ提供します。ユーザーが既にアプリケーションを利用中であれば、Railsは既存のセッションを読み込み、そうでない場合は新しいセッションを作成します。

自動的にcookieを使えるようにしているのか。
どのようにsessionが管理されているのか?
どこに保存されているのか?
sessionはコントローラとビューでどう使われていたか?

セッションにはIDで管理されている

あらゆるセッションは、cookieを利用してセッション固有のIDを保存します(cookieは必ず使うこと: セッションIDをURLで渡すとセキュリティが低下するため、この方法はRailsで許可されません)。

ほとんどのセッションストアでは、サーバー上のセッションデータ(データベーステーブルなど)を検索するときにこのIDを使います。

セッション一つ一つにIDが自動で振り分けられているのか。

sessionの保存場所

CookieStoreは、Railsで推奨されているデフォルトのセッションストアであり、例外的にすべてのセッションデータをcookie自身に保存します(必要に応じてセッションIDも利用可能です)。CookieStoreには非常に軽量であるというメリットがあり、新規Webアプリケーションでセッションを利用するための準備も不要です。このcookieデータは改ざん防止のために暗号署名が追加されており、cookie自身も暗号化されているので、他人が読むことはできません(改ざんされたcookieはRailsに拒否されます)。

知らない間にCookieを使っていたことに気が付かなかった。
試しにリクエストを見てみるとCookieヘッダーがあり、値も暗号化されていた。

セッションストアの種類

  • ActionDispatch::Session::CookieStore すべてをクライアント側に保存する
  • ActionDispatch::Session::CacheStore: データをRailsのキャッシュに保存する
  • ActionDispatch::Session::MemCacheStore データをmemcachedクラスタに保存する(この実装は古いのでCacheStoreをご検討ください)
  • ActionDispatch::Session::ActiveRecordStore: Active Recordデータベースに保存する(activerecord-session_store gemが必要)
  • 独自のストアや、サードパーティgemが提供するストア

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?