Railsのセッションとクッキーを完全解説!初心者でもわかるサインイン状態とセキュリティ設定
生徒
「サインインしたユーザーの情報って、どうやって覚えてるんですか?ずっと同じページにいても消えないですよね?」
先生
「Railsではセッションやクッキーという仕組みを使って、サインイン状態を管理しているんだよ。」
生徒
「セッションとクッキーって、違いがあるんですか?セキュリティ的にも大事そう…」
先生
「もちろん。サインイン状態の管理や期限、セキュリティの設定まで、丁寧に解説していくね。」
1. セッションとクッキーとは?
セッションとクッキーは、Webアプリケーションで 「ユーザーの状態や情報を一時的に覚えておくための仕組み」です。 画面を移動してもログイン状態が維持されるのは、この2つが裏側で働いているからです。
たとえば、ネットショップで商品をカートに入れたあと別のページへ移動しても、 カートの中身が消えないのは、セッションやクッキーに情報が保存されているためです。 ユーザーが何度も同じ操作をしなくて済むようにする、大切な役割を持っています。
- セッション:Railsがサーバー側で管理し、安全に情報を保持する仕組み
- クッキー:ブラウザに保存され、次回アクセス時にも送られる小さなデータ
# セッションに情報を保存する例(ログイン状態など)
session[:user_id] = 1
# クッキーに情報を保存する例(表示名など)
cookies[:user_name] = "taro"
このように、セッションは「誰が操作しているか」を覚えるのに向いており、 クッキーは「ちょっとした設定や表示用の情報」を覚えるのに向いています。 まずは「セッション=サーバー側」「クッキー=ブラウザ側」と覚えておくと、 後の理解がスムーズになります。
2. セッションの使い方(ログイン状態を管理)
セッションは、ユーザーがログインしたあとに 「この人は誰か?」という情報をRailsが覚えておくための仕組みです。 一度ログインすれば、ページを移動しても毎回ログインし直す必要がないのは、 セッションにユーザー情報が保存されているからです。
初心者の方は、「セッションはログイン中の名札のようなもの」と考えると分かりやすいでしょう。 ブラウザからリクエストが来るたびに、Railsはその名札を見て、 同じユーザーかどうかを判断しています。
def login
user = User.find_by(email: params[:email])
if user&.authenticate(params[:password])
session[:user_id] = user.id
redirect_to root_path
else
flash.now[:alert] = "メールアドレスまたはパスワードが違います"
render :new
end
end
この例では、ログインに成功したときに
session[:user_id]へユーザーのIDを保存しています。
これにより、次のページ表示や操作でもRailsは
「今ログインしているのはこのユーザーだ」と判断できます。
ログイン状態を維持する基本の形として、まずはこの流れを押さえておきましょう。
3. セッションの削除(ログアウト処理)
ログアウトするときは、セッションに保存していたログイン情報を消します。 セッションは「ログイン中の名札」だとすると、ログアウトはその名札を外す作業です。 これをしないと、同じブラウザを使った次の操作でもログイン状態が続いてしまいます。
Railsでは、特定のキーだけを消す方法が基本です。 まずは「ログイン時に入れたものを、ログアウト時に消す」と覚えると迷いません。
def logout
session.delete(:user_id)
redirect_to login_path, notice: "ログアウトしました"
end
上の例では、session[:user_id]を削除しています。
これによりRailsは、そのユーザーを「ログインしていない」と判断します。
画面を切り替えたときに表示が変わる(例:ログインボタンが戻る)場合は、
セッション削除が正しく動いているサインです。
# 補足:ログアウト後に「ログイン必須ページ」へ行くと、
# ログイン画面へ戻されるような動きになります(例)
4. クッキーの使い方と違い
クッキーは、ブラウザ(Chromeなど)に保存される小さなデータです。 セッションが「サーバー側で覚える」のに対して、クッキーは「ユーザーの端末側に残る」のが大きな違いです。 そのため、ページを移動したり、ブラウザを閉じて開き直したりしても、内容が残ることがあります。
たとえばWebアプリで「表示名」や「前回選んだ設定」を覚えておきたいときに、クッキーがよく使われます。
Railsではcookiesという仕組みを通して、保存・読み取りができます。
まずは「入れる(保存する)→ 取り出す(読む)」の流れを体感してみましょう。
# クッキーに保存する例(表示名など)
cookies[:user_name] = "taro"
# クッキーから読み取る例(保存した値を取り出す)
cookies[:user_name] # => "taro"
上のように保存しておくと、次にページを開いたときもブラウザがクッキーを送ってくれるため、
Rails側でcookies[:user_name]を読むだけで同じ値が使えます。
ただし、クッキーはブラウザに保存される分「誰でも見られる可能性がある情報」と考えるのが安全です。
パスワードのような大事な情報は入れず、表示用・設定用の軽いデータに使うのが基本です。
5. クッキーの有効期限を設定する
クッキーには期限をつけることができます。期限を過ぎると、自動的に削除されます。
cookies[:user_name] = { value: "taro", expires: 1.week.from_now }
expiresを使うことで、「1週間だけログイン状態を保存する」といった操作ができます。
6. セキュリティ設定(暗号化とHTTP-only)
クッキーはブラウザに保存されるため、セキュリティ対策が重要です。Railsでは、自動的にクッキーを暗号化していますが、さらに安全にするための設定も可能です。
cookies[:token] = {
value: "secure_token",
httponly: true,
secure: Rails.env.production?
}
httponly: trueにすると、JavaScriptからアクセスできなくなり、セキュリティが向上します。secure: trueにすると、HTTPS通信のときだけクッキーが使われます。
これらの設定を使うことで、悪意あるアクセスからユーザー情報を守ることができます。
7. セッションとクッキーの使い分け
ここで、セッションとクッキーの違いを整理しておきましょう。
- セッション:サーバー側で管理、安全性が高い。ログイン情報などに適している。
- クッキー:ブラウザ側に保存、手軽に使える。表示名や設定に使われることが多い。
たとえば、ログイン状態はセッションで、「ようこそ〇〇さん」表示はクッキーで、といった使い分けが可能です。
8. クッキーとセッションの確認方法(開発者ツール)
自分が設定したセッションやクッキーがどう保存されているかは、ブラウザの開発者ツールで確認できます。
- Google Chromeの場合:「右クリック → 検証」→「Applicationタブ」→「Cookies」や「Session Storage」を見る
開発中に中身を確認することで、正しく動作しているかどうかをチェックできます。