Railsチュートリアルを進めていてセッションとCookieについて整理したかったので自分用メモとして書いた。
セッション
WebアプリケーションではブラウザからサーバへHTTPリクエストを送り、HTTPレスポンスを受け取って画面表示を行う。しかしHTTPはステートレスなプロトコルであるため、同じユーザーから送られた1つ目のリクエストから2つ目のリクエストの情報を引き継ぐことができない。そのためセッションを用いることで、1つのブラウザから連続して送られている一連のリクエスト間で状態を共有できるようにしている。
Railsではsessionメソッドを使うことで実現できる。sessionはハッシュのように扱うことができ、セッションにデータを入れるには任意のキーを指定して値を格納する。
session[:user_id] = @user.id
```
値を取り出すには下記の通り書く。
@user.id = session[:user_id]
# Cookie
複数のリクエストの間で共有したい状態をブラウザ側に保存する仕組み。クライアントが情報を持っているのでブラウザを閉じても破棄されない。また暗号化しないと簡単に読み取られる。ログイン情報をセッションのみで扱うとブラウザを閉じるたびにログインしないといけなくなる。そのためCookieにもログイン情報を持たせてしまい、ブラウザを閉じても状態を保持させるという使い方が一般的。Railsではcookiesメソッドを使ってこの機能を実現する。
# RailsでのセッションとCookieの関係
Railsのセッションの仕組みの一部はCookieによって実現されている。ブラウザを閉じると破棄されるようなCookieという形で暗号化されたセッション情報をクライアント側に保存するという仕組み。またRailsではセッションデータの保管場所を複数の選択肢から選ぶことができるが、デフォルトでCookieになっている。そのためブラウザ側で対応するCookieを消せば、セッションはリセットされることになる。