1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RailsでのSession, Cookie利用について

Last updated at Posted at 2024-12-07

概要

Rails環境でのCookie, Session利用についてまとめました。

Cookie, Sessionそのものは知っているけど、
Railsでの利用方法がわからない方向けに執筆しています。

Session, Cookie について

セッション...? クッキー...? という方は以下の記事をご一読ください。

Session

Sessionデータの保存先について

Railsでは、Sessionデータの保存場所として、以下を指定することができます。
データの保存先として、CookieDBを利用できることを認識しておきましょう!

ストアタイプ 説明
cookie_store クッキーにセッションデータを保存。
デフォルトではセッションクッキー(ブラウザ終了時に削除)として設定。
keyを省略した場合、cookie名は_session_idとなる
cache_store Rails のキャッシュストア(例: MemcachedRedis)を利用してセッションデータを保存。
active_record_store データベースのテーブル(デフォルトは sessions テーブル)にセッションデータを保存。
mem_cache_store Memcached を使用してセッションデータを保存。

保存先の設定はconfig/application.rbで行います。

  • config.session_storeで保存先を指定
  • Sessionを利用するためのミドルウェアを有効化
# config/application.rb
module SampleApp
  class Application < Rails::Application
    # ...
    
    # ここから
    config.session_store :cookie_store
    config.middleware.use ActionDispatch::Cookies
    config.middleware.use config.session_store, config.session_options
    # ここまで
  end
end

Sessionデータを取り扱う前に上記設定が必要になるため、忘れずに対応しましょう!

Sessionのアクセス

# Write
session[:test_session] = "test_session"

# Read
session[:test_session]

これだけです。
簡単ですね...!

Cookie

続いてはCookieを見ていきましょう。

Cookieのアクセス

# Write
cookies[:test_cookie] = "test_cookie"

# Read
cookies[:test_cookie]

こちらも簡単ですね。
cookieにはよく利用するオプションがいくつかありますので、以下で詳しく解説します。

Cookie のオプション

Cookieにはさまざまなオプションを指定できます。
以下オプションは、中でも利用機会が多いので、必ず覚えておきましょう。

  • http_only
  • secure
  • expires

設定例

cookies[:test_cookie] = { value: "test_cookie", httponly: true, secure: true }
オプション名 概要
http_only CookieをHTTPプロトコル経由でのみアクセス可能にする。
JavaScriptからのアクセスを防ぎ、XSS攻撃から保護。
secure HTTPS接続時のみCookieを送信する。
Cookieが暗号化されていない接続で送信されるのを防ぐ。
permanent Cookieの有効期限を永久(約20年後)に設定する。
Cookieを長期間保持させたい場合に使用します。
signed Cookieの値を署名付きで保存。
Cookieがクライアント側で改ざんされていないことを検証できる。
署名/検証に利用するキーはcredentialsで管理される。
expires Cookieの有効期限を具体的な日時で設定する
max_age Cookieの有効期間を秒数で設定する
domain Cookieが有効となるドメインを指定する。
サブドメインとCookieを共有したい場合に使用する。
path Cookieが有効となるパスを指定する。
特定のパスでのみCookieを送信したい場合に設定します。
samesite CookieのSameSite属性を設定する
:lax:strict:noneのいずれかを指定し、クロスサイトリクエストに対するCookieの送信ポリシーを制御する。
encrypted Cookieの値を暗号化して保存する。
Cookieの内容が第三者に読み取られることを防ぐ。
serializer Cookieのデータシリアライザを指定する。
:json:marshalを指定して、Cookieのデータ形式を制御する。

ハンズオン

それでは実際にSessioncookie_store)を利用してみましょう。

準備

まずは、config/application.rbでセッションストアの設定を行います。

# config/application.rb
module SampleApp
  class Application < Rails::Application
    # ...
    # 追加
    config.session_store :cookie_store, key: "test_app"
    config.middleware.use ActionDispatch::Cookies
    config.middleware.use config.session_store, config.session_options
  end
end

次に、対応するコントローラーとルーティングを定義します。
Rakeコマンドを使用しましょう。

rails g controller custom/cookies_controller index
# app/controllers/custom/cookies_controller.rb
class Custom::CookiesController < ApplicationController
  def index
    session[:test_session] = { value: "test_session" }
    cookies[:test_cookie] = { value: "test_cookie" }

    render json: {
      message: "Session and Cookie have been set.",
      session: session[:test_session],
      cookies: cookies[:test_cookie]
    }
  end
end

# config/routes.rb
namespace :custom do
  get "cookies/index"
end

以上で設定は完了です。

アクセス

ブラウザで http://localhost:3000/custom/cookies/index にアクセスしましょう。
開発者ツールの Application タブから Cookie 情報を確認します。

sessionに格納したデータ(_session_id)と
cookieに格納したデータ(test_cookie)それぞれ確認できれば正常動作になります。

image.png

まとめ

お疲れ様でした!
これで基本的な取り扱いについてはマスターできたと思います!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?