落ち着きのないUIデザイナーの備忘録

UIデザイン/フロントエンド/Ruby on Railsなどの知識や技術の備忘録です。

ログインを実現するセッションとクッキー

今までもRuby on Railsで作成したアプリケーションに、ログイン機能を実装していたのですが、Gem(Devise)を利用して実装してきたこともあり、裏側でどんな処理がされているのかというのが、全く理解できていなかったため、WEBアプリケーションのログイン機能で使われるクッキーとセッションの基礎を学習したので、稚拙ではありますが、備忘録としてまとめます。 

・セッションとは

状態を保持するための、ブラウザとサーバーとの接続状態の呼び名。
 

・なぜセッションが必要なのか

Railsチュートリアルの第8章を確認したところ、


railstutorial.jp


以下のように記述がされています。

HTTPはステートレスなプロトコルです。文字通り「ステート (state)」が「ない (less)」ので、HTTPのリクエストひとつひとつは、それより前のリクエストの情報をまったく利用できない、独立したトランザクションとして扱われます。 


つまり、HTTPリクエストでは、ログインしているのかしてないのかといった「状態」を持たせることができない。
そのため、ログイン状態を保持する為に、セッションで状態についての情報を保持する必要がある。

 

・クッキーとは

クッキーは、ブラウザ(クライアント)側に備わっている、ブラウザとサーバのやりとりの情報を記録することができるもの。

クライアント側が情報を持っているので、たとえブラウザを閉じたとしても、記録した情報は、破棄されない。

しかしクライアント側でクッキーの中身をみれるので、暗号化する必要がある。

 

・なぜクッキーが必要なのか

こちらについてもRailsチュートリアルに以下のように、詳しく記述があります。

Railsでセッションを実装する方法として最も一般的なのは、cookiesを使用する方法です。cookiesとは、ユーザーのブラウザに保存される小さなテキストデータです。cookiesは、あるページから別のページに移動した時にも破棄されないので、ここにユーザーIDなどの情報を保存できます。アプリケーションはcookies内のデータを使用して、たとえばログイン中のユーザーが所有する情報をデータベースから取り出すことができます。本節および8.2では、その名もsessionというRailsのメソッドを使用して一時セッションを作成します。この一時セッションは、ブラウザを閉じると自動的に終了します2。続いて8.4では、Railsの別のcookiesメソッドを使用して、もう少し長続きするセッションを追加します。

先述の通り、クッキーは、たとえブラウザを閉じたとしても、記録した情報は、破棄されない。
ログイン機能で考えると、ログインしている状態でブラウザを閉じて、もう一度ブラウザを立ち上げても、ログイン状態が維持されるということが実現できる。