こんにちは。てくてーくです。
今回はRailsのsessionメソッドについて学んでいきます。
Railsチュートリアルをやっているとログイン機能の実装でsessionメソッドが出てきますが、チュートリアルの中ではサラッとした説明しかありませんでしたのでここでより理解を深めたいと思います。
sessionメソッドをまとめてみる
チュートリアルで説明されているsessionメソッドの特徴と機能を以下の4点にまとめてみました。
- 単純なログインを行えるようになる
- ハッシュのように扱える
- cookiesメソッドとは対照的にsessionメソッドで作成された一時cookiesはブラウザを閉じた瞬間に有効期限が終了する
- アクセスできるのはController内
Railsチュートリアル 第8章基本的なログイン機構から抜粋
では順番に見ていきましょう。
単純なログインを行えるようになる
sessionメソッドはログイン機能を実装するのに使用します。
Railsには事前にsessionメソッドが定義されているため、これを使えばログインの機能が実装できます。
ハッシュのように扱える
session[:user_id] = user.id
このコードはユーザーI Dをsessionメソッドによりハッシュ化(暗号化)してuser_idのパラメーターに格納します。
暗号化されたuser_idは
session[user_id]
により元通りに取り出すことができます。
cookiesメソッドとは対照的にsessionメソッドで作成された一時cookiesはブラウザを閉じた瞬間に有効期限が終了する
cookiesメソッド
これを理解するためにはまずcookiesメソッドとはどういうメソッドなのかを見ていきましょう。
Webアプリケーションではcookieと呼ばれる少量のデータをクライアントのブラウザに保存することができる機能があります。
cookiesへのアクセス方法
Railsではcookieのデータにcookiesメソッドで簡単にアクセスすることができます。
cookies[:user_id] = user.id
先ほどのsessionメソッドと同じようにユーザーIDをcookieに保存します。
個別のcookiesは一つのvalue(値)とオプションのexpires(有効期限)からできています。
expires(有効期限)は省略ができますので特に指定しなくても大丈夫です。
sessionメソッドとの違い
- 暗号化されない
sessionメソッドと書き方は同じですがcookiesメソッドはsessionメソッドとは違いユーザーIDは暗号化されずに生のユーザーIDを保存します。
cookiesメソッドでユーザーIDなどのログイン情報等を保存させる場合は、sessionメソッドと同じように暗号化等のなんらかの措置をしなければ危険です。
- 有効期限が違う
cookiesメソッドで作成した 一時cookieはブラウザを閉じてもデータは残されますが、sessionメソッドで作成した一時cookieはブラウザを閉じればデータは消去されます。
アクセスできるのはController内
セッションを利用できるのはControllerとViewのみです。
そしてController内ではインスタンスメソッドでセッションにアクセスできます。先ほどのsessionメソッドはControllerに書いてセッションにアクセスします。
まとめ
sessionメソッドを理解するためにはcookieについても深く理解する必要があります。これを理解しないとremember me機能の実装もできないのでここで押さえておきたいところです。
またcookiesメソッドで作成した永続的cookieは常にセッションハイジャックという攻撃を受ける可能性がついて回りますのでWebアプリを作る際には気を付けて実装しなければいけませんね。
コメント