カテゴリ: Rails 更新日: 2025/12/23

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. クッキーの有効期限を設定する

クッキーには期限をつけることができます。期限を過ぎると、自動的に削除されます。


cookies[:user_name] = { value: "taro", expires: 1.week.from_now }

expiresを使うことで、「1週間だけログイン状態を保存する」といった操作ができます。

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
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Rails
RailsモデルとActive Record基礎|クエリログの読み方を理解してEXPLAIN・joins・includesの違いを学ぼう