sessionとは

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

https://railsguides.jp/action_controller_overview.html#%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3:~:text=Rails%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AF%E3%80%81%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%94%E3%81%A8%E3%81%AB%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%89%8D%E3%81%AE%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%AE%E6%83%85%E5%A0%B1%E3%82%92%E6%AC%A1%E3%81%AE%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%A7%E3%82%82%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E5%B0%91%E9%87%8F%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8C%E4%BF%9D%E5%AD%98%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AF%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%A8%E3%83%93%E3%83%A5%E3%83%BC%E3%81%A7%E3%81%AE%E3%81%BF%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

>アプリケーションはセッションを用いて、多くのユーザーがアプリケーションとやりとりできるようにしつつ、`各ユーザー固有のステートを維持`します。たとえばセッションを用いることで、ユーザーが認証されれば以後のリクエストで`サインインしたまま`にできます。
>
>多くのアプリケーションでは、アプリケーションを操作するユーザーの`ステート（状態）を追跡`する必要があります。ショッピングサイトの買い物カゴや、現在ログインしているユーザーのidなどがこれに該当します。このようなユーザー固有のステートはセッションに保存できます。
>
>Railsは、アプリケーションにアクセスする`ユーザーごとにセッションオブジェクトを1つ提供`します。ユーザーが既にアプリケーションを利用中であれば、Railsは既存のセッションを読み込み、そうでない場合は新しいセッションを作成します。

https://railsguides.jp/security.html#cookiestore%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E3%83%AA%E3%83%97%E3%83%AC%E3%82%A4%E6%94%BB%E6%92%83:~:text=%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AF%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3,%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

https://qiita.com/masatom86650860/items/7a48106682855790c8a2#%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E3%81%AF

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

# セッションにはIDで管理されている
>`あらゆるセッションは、cookieを利用してセッション固有のIDを保存`します（cookieは必ず使うこと: セッションIDをURLで渡すとセキュリティが低下するため、この方法はRailsで許可されません）。
>
>ほとんどのセッションストアでは、サーバー上の`セッションデータ（データベーステーブルなど）を検索するときにこのID`を使います。

https://railsguides.jp/action_controller_overview.html#%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3:~:text=%E3%81%82%E3%82%89%E3%82%86%E3%82%8B%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AF,%E3%82%92%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

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

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

https://railsguides.jp/action_controller_overview.html#%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3:~:text=CookieStore%E3%81%AF%E3%80%81Rails%E3%81%A7%E6%8E%A8%E5%A5%A8%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%B9%E3%83%88%E3%82%A2%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81%E4%BE%8B%E5%A4%96%E7%9A%84%E3%81%AB%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92cookie%E8%87%AA%E8%BA%AB%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99%EF%BC%88%E5%BF%85%E8%A6%81%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3ID%E3%82%82%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%EF%BC%89%E3%80%82CookieStore%E3%81%AB%E3%81%AF%E9%9D%9E%E5%B8%B8%E3%81%AB%E8%BB%BD%E9%87%8F%E3%81%A7%E3%81%82%E3%82%8B%E3%81%A8%E3%81%84%E3%81%86%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%8C%E3%81%82%E3%82%8A%E3%80%81%E6%96%B0%E8%A6%8FWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%BA%96%E5%82%99%E3%82%82%E4%B8%8D%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%81%AEcookie%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AF%E6%94%B9%E3%81%96%E3%82%93%E9%98%B2%E6%AD%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AB%E6%9A%97%E5%8F%B7%E7%BD%B2%E5%90%8D%E3%81%8C%E8%BF%BD%E5%8A%A0%E3%81%95%E3%82%8C%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81cookie%E8%87%AA%E8%BA%AB%E3%82%82%E6%9A%97%E5%8F%B7%E5%8C%96%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%E4%BB%96%E4%BA%BA%E3%81%8C%E8%AA%AD%E3%82%80%E3%81%93%E3%81%A8%E3%81%AF%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%EF%BC%88%E6%94%B9%E3%81%96%E3%82%93%E3%81%95%E3%82%8C%E3%81%9Fcookie%E3%81%AFRails%E3%81%AB%E6%8B%92%E5%90%A6%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%EF%BC%89%E3%80%82

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

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

https://railsguides.jp/action_controller_overview.html#%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3:~:text=ActionDispatch%3A%3ASession%3A%3ACookieStore,%E6%8F%90%E4%BE%9B%E3%81%99%E3%82%8B%E3%82%B9%E3%83%88%E3%82%A2