Rails4:CookieOverflowエラーを解決する

セッションに巨大なデータを格納しようとしたら、CookieOverflowエラーとなる。 今回はTwitterのauth認証の際に色々なデータ(4KB以上)を格納しようとしたからみたいです。

解決方法

  1. セッションは使うけど、最小限のデータだけを格納する。
  2. セッションデータをActiveRecord上に格納する。

やったことないので、Activerecordに格納することにした。

1. データを格納するテーブルを作成する。

$ gem 'activerecord-session_store', github: 'rails/activerecord-session_store'
$ bundle install
$ rails generate active_record:session_migration
$ rake db:migrate
== 20140813104550 AddSessionsTable: migrating =================================
-- create_table(:sessions)
   -> 0.0130s
-- add_index(:sessions, :session_id, {:unique=>true})
   -> 0.0006s
-- add_index(:sessions, :updated_at)
   -> 0.0005s
== 20140813104550 AddSessionsTable: migrated (0.0142s) ========================

ちなみに以下でテーブルを作成できると書いていた方もおられましたが、私は無理でした。 たぶんRails4だから?

$ rake db:sessions:create
$ rake db:migrate

2. データの格納方法を変更する

config/initializers/session_store.rbを書き換える。

3. サーバーを立ち上げ直す

以上でエラーもなくなり、セッションデータをActiveRecord上に格納することができるようになった。