Rails – CookieOverflowが発生したときの対処法

ActionDispatch::Cookies::CookieOverflowエラー(例外)はセッションに大きすぎるデータ(4KB以上のデータ)を格納しようとしたときに発生します。flashもセッションにデータを格納する仕組みですので、大量のエラーメッセージをflashに格納する場合などは注意が必要です。

このエラーの解決方法は2つあります。1つは極力セッションを使わないこと、または使ったとしても最小限のデータを格納するのにとどめることです。この解決方法が最もスマートだと思います。セッションに大量のデータを格納するような設計には問題があります。

ただ、どうしてもセッションに大量のデータを格納しておきたい、でもCookieOverflowが発生してしまう。そんなときに2つ目の方法としてセッションデータをActiveRecord上に格納する方法があります。このメモではこの方法について解説します。

 

セッションをActiveRecordに格納する方法

まず、以下のコマンドでセッション上のデータを格納するテーブルを作成します。

rake db:sessions:create
rake db:migrate

次に config/initializers/session_store.rb の設定を以下のように変更します。

[プロジェクト名]::Application.config.session_store :active_record_store

最後にRailsサーバーを再起動して完了です。

 

環境

Rails 3.2.9

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です