カテゴリ: Rails 更新日: 2026/02/24

Railsのセッションとクッキーを完全解説!初心者でもわかるサインイン状態とセキュリティ設定

セッションとクッキーの使い方:サインイン状態・期限・セキュリティ設定
セッションとクッキーの使い方:サインイン状態・期限・セキュリティ設定

先生と生徒の会話形式で理解しよう

生徒

「サインインしたユーザーの情報って、どうやって覚えてるんですか?ずっと同じページにいても消えないですよね?」

先生

「Railsではセッションクッキーという仕組みを使って、サインイン状態を管理しているんだよ。」

生徒

「セッションとクッキーって、違いがあるんですか?セキュリティ的にも大事そう…」

先生

「もちろん。サインイン状態の管理や期限、セキュリティの設定まで、丁寧に解説していくね。」

1. セッションとクッキーとは?

1. セッションとクッキーとは?
1. セッションとクッキーとは?

セッションクッキーは、Webアプリケーションで 「ユーザーの状態や情報を一時的に覚えておくための仕組み」です。 画面を移動してもログイン状態が維持されるのは、この2つが裏側で働いているからです。

たとえば、ネットショップで商品をカートに入れたあと別のページへ移動しても、 カートの中身が消えないのは、セッションやクッキーに情報が保存されているためです。 ユーザーが何度も同じ操作をしなくて済むようにする、大切な役割を持っています。

  • セッション:Railsがサーバー側で管理し、安全に情報を保持する仕組み
  • クッキー:ブラウザに保存され、次回アクセス時にも送られる小さなデータ

# セッションに情報を保存する例(ログイン状態など)
session[:user_id] = 1

# クッキーに情報を保存する例(表示名など)
cookies[:user_name] = "taro"

このように、セッションは「誰が操作しているか」を覚えるのに向いており、 クッキーは「ちょっとした設定や表示用の情報」を覚えるのに向いています。 まずは「セッション=サーバー側」「クッキー=ブラウザ側」と覚えておくと、 後の理解がスムーズになります。

2. セッションの使い方(ログイン状態を管理)

2. セッションの使い方(ログイン状態を管理)
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. セッションの削除(ログアウト処理)

3. セッションの削除(ログアウト処理)
3. セッションの削除(ログアウト処理)

ログアウトするときは、セッションに保存していたログイン情報を消します。 セッションは「ログイン中の名札」だとすると、ログアウトはその名札を外す作業です。 これをしないと、同じブラウザを使った次の操作でもログイン状態が続いてしまいます。

Railsでは、特定のキーだけを消す方法が基本です。 まずは「ログイン時に入れたものを、ログアウト時に消す」と覚えると迷いません。


def logout
  session.delete(:user_id)
  redirect_to login_path, notice: "ログアウトしました"
end

上の例では、session[:user_id]を削除しています。 これによりRailsは、そのユーザーを「ログインしていない」と判断します。 画面を切り替えたときに表示が変わる(例:ログインボタンが戻る)場合は、 セッション削除が正しく動いているサインです。


# 補足:ログアウト後に「ログイン必須ページ」へ行くと、
# ログイン画面へ戻されるような動きになります(例)

4. クッキーの使い方と違い

4. クッキーの使い方と違い
4. クッキーの使い方と違い

クッキーは、ブラウザ(Chromeなど)に保存される小さなデータです。 セッションが「サーバー側で覚える」のに対して、クッキーは「ユーザーの端末側に残る」のが大きな違いです。 そのため、ページを移動したり、ブラウザを閉じて開き直したりしても、内容が残ることがあります。

たとえばWebアプリで「表示名」や「前回選んだ設定」を覚えておきたいときに、クッキーがよく使われます。 Railsではcookiesという仕組みを通して、保存・読み取りができます。 まずは「入れる(保存する)→ 取り出す(読む)」の流れを体感してみましょう。


# クッキーに保存する例(表示名など)
cookies[:user_name] = "taro"

# クッキーから読み取る例(保存した値を取り出す)
cookies[:user_name]  # => "taro"

上のように保存しておくと、次にページを開いたときもブラウザがクッキーを送ってくれるため、 Rails側でcookies[:user_name]を読むだけで同じ値が使えます。 ただし、クッキーはブラウザに保存される分「誰でも見られる可能性がある情報」と考えるのが安全です。 パスワードのような大事な情報は入れず、表示用・設定用の軽いデータに使うのが基本です。

5. クッキーの有効期限を設定する

5. クッキーの有効期限を設定する
5. クッキーの有効期限を設定する

クッキーには有効期限(いつまで残すか)を付けられます。 期限を決めておくと、指定した日時を過ぎたタイミングでブラウザが自動的に削除してくれるため、 「ずっと残り続けるのは困る情報」を扱うときに便利です。 たとえば「次回から自動入力する表示名」や「しばらく同じ設定を使う」といった用途でよく使われます。


# 1週間だけクッキーを残す例
cookies[:user_name] = { value: "taro", expires: 1.week.from_now }

上のようにexpiresを付けると、Railsがクッキーに期限情報を持たせてブラウザへ返します。 するとブラウザ側が「1週間経ったら消す」と判断してくれる、という仕組みです。 逆に、期限を付けない場合はブラウザを閉じたタイミングで消えることが多く、 “一時的に覚えるだけ”の用途に向いています。


# 読み取り例:保存した値はこうして取り出せます
cookies[:user_name]  # => "taro"

まずは「期限付きで保存できる」と知っておくだけでも、Railsでのクッキー管理がぐっと分かりやすくなります。 必要な期間だけ残すように設計すると、使い勝手と安全性のバランスも取りやすくなります。

6. セキュリティ設定(暗号化とHTTP-only)

6. セキュリティ設定(暗号化とHTTP-only)
6. セキュリティ設定(暗号化とHTTP-only)

クッキーはブラウザに保存されるため、セキュリティ対策が重要です。Railsでは、自動的にクッキーを暗号化していますが、さらに安全にするための設定も可能です。


cookies[:token] = {
  value: "secure_token",
  httponly: true,
  secure: Rails.env.production?
}
  • httponly: true にすると、JavaScriptからアクセスできなくなり、セキュリティが向上します。
  • secure: true にすると、HTTPS通信のときだけクッキーが使われます。

これらの設定を使うことで、悪意あるアクセスからユーザー情報を守ることができます。

7. セッションとクッキーの使い分け

7. セッションとクッキーの使い分け
7. セッションとクッキーの使い分け

ここで、セッションとクッキーの違いを整理しておきましょう。

  • セッション:サーバー側で管理、安全性が高い。ログイン情報などに適している。
  • クッキー:ブラウザ側に保存、手軽に使える。表示名や設定に使われることが多い。

たとえば、ログイン状態はセッションで、「ようこそ〇〇さん」表示はクッキーで、といった使い分けが可能です。

8. クッキーとセッションの確認方法(開発者ツール)

8. クッキーとセッションの確認方法(開発者ツール)
8. クッキーとセッションの確認方法(開発者ツール)

自分が設定したセッションやクッキーがどう保存されているかは、ブラウザの開発者ツールで確認できます。

  • Google Chromeの場合:「右クリック → 検証」→「Applicationタブ」→「Cookies」や「Session Storage」を見る

開発中に中身を確認することで、正しく動作しているかどうかをチェックできます。

関連記事:
カテゴリの一覧へ
新着記事
New1
Ruby
Ruby学習ロードマップ完全ガイド!基礎からOOP・テスト・Web開発・運用まで効率的に進める方法
New2
Ruby
RubyでWeb/API開発を始めるには?RailsとSinatraの選び方と学習ロードマップ
New3
Rails
Railsのリアルタイム通信を完全理解!初心者でもわかる認証付きWebSocketとAction Cableの安全設計
New4
Rails
Railsの設定ファイルをやさしく解説!application.rb・credentials・environmentsの違いと役割
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
OpenSSL関連エラーの直し方を完全解説!証明書・ビルドオプション・brew対策まとめ
No.3
Java&Spring記事人気No3
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.4
Java&Spring記事人気No4
Rails
Rails認可をやさしく理解!CanCanCan入門:ability.rbの定義とload_and_authorize_resource実例
No.5
Java&Spring記事人気No5
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
No.6
Java&Spring記事人気No6
Ruby
Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け
No.7
Java&Spring記事人気No7
Ruby
Rubyのsortとsort_byの違いを徹底比較!性能や安定ソートのコツを初心者向けに解説
No.8
Java&Spring記事人気No8
Rails
Railsのqueue_adapter完全比較ガイド|inline・resque・sidekiq・good_jobの選び方を初心者向けに解説