¿Desbordamiento de cookies en la aplicación de Rails?

ActionDispatch :: Cookies :: CookieOverflow en UsersController # create

Tengo este error cuando trato de abrir la página. No sé cómo depurar este error. ¿Tienes alguna sugerencia para este problema?

def create @user = User.new(params[:user]) sign_in @user if @user.save @user.folders.create(:folder_name=>"Default Folder", :user_id=>@user.id) flash[:success] = "Welcome to Bunch! " redirect_to @user else @title = "Sign up" render 'new' end end def sign_in(user) cookies.permanent.signed[:remember_token] = [user.id, user.salt] session[:current_user] = user current_user = user end 

Tienes un límite de 4kb para lo que puedes almacenar en una cookie, y cuando Rails convierte tu objeto en texto para escribir en la cookie, probablemente sea más grande que ese límite.

Ruby on Rails ActionDispatch::Cookies::CookieOverflow Error de ActionDispatch::Cookies::CookieOverflow

De esta forma se produce este error de CookieOverflow .

La forma más fácil de resolver este problema es que necesita cambiar su session_store y no usar el cookie_store . Puede usar active_record_store por ejemplo.

Aquí están los pasos

  1. Genera una migración que crea la tabla de sesión

     rake db:sessions:create 
  2. Ejecute la migración

     rake db:migrate 
  3. Modificar config/initializers/session_store.rb desde

     (App)::Application.config.session_store :cookie_store, :key => 'xxx' 

    a

     (App)::Application.config.session_store :active_record_store 

Una vez que haya realizado los tres pasos, reinicie su aplicación. Rails ahora usará la tabla de sesiones para almacenar los datos de la sesión, y usted no tendrá el límite de 4kb.

Para hacer que la funcionalidad :active_record_store funcione en Rails 4/5, debe agregar la gem activerecord-session_store a su Gemfile :

 gem 'activerecord-session_store' 

luego ejecuta el generador de migración:

 rails generate active_record:session_migration rake db:migrate 

Y finalmente configure su tienda de sesiones en config/initializers/session_store.rb :

 Rails.application.config.session_store :active_record_store, :key => '_my_app_session' 

ACTUALIZAR:

Si alguien está recibiendo un null value in column "session_id" violates not-null constraint mensaje de null value in column "session_id" violates not-null constraint en los Rails 4, hay una solución alternativa en github (no probada). Debe crear un inicializador con ActiveRecord::SessionStore::Session.attr_accessible :data, :session_id

el mensaje de error indica claramente el problema con el tamaño del almacén de cookies que está desbordado.

Sus sesiones (de forma predeterminada en la cookie) deben moverse a la tienda de registros activos o a la tienda de Memcache para solucionar este problema.

Para sesiones basadas en datos:

 config.action_controller.session_store = :active_record_store 

Necesita crear la tabla de sesión como se muestra a continuación

 rake db:sessions:create rake db:migrate 

O

Para las sesiones de Memcache:

 config.action_controller.session_store = :mem_cache_store 

También necesita configurar un servidor de memoria caché y configurarlo de la siguiente manera:

 config.cache_store = :mem_cache_store, 'localhost', '127.0.0.1:11211', {:namespace => 'myapp123'} 

No es una buena idea almacenar un objeto modelo en la sesión.

Echa un vistazo a este tema sobre este tema: http://railscasts.com/episodes/13-dangers-of-model-in-session?autoplay=true

Es una mejor práctica almacenar la identificación (identificación del usuario en este caso) dentro de la sesión. Entonces no tendrás este problema.

(Véase también el comentario de Frederick Cheung).

Si está viendo esto, verifique que no está explotando algunos datos de la sesión. En mi caso, fueron miles del mismo mensaje bombeado en el mensaje flash. Solo digo.

Este error apareció para mí cuando estaba ejecutando unas especificaciones. Después de actualizar Capybara de 1.x a 2.x. Solo rake tmp: clear lo resolvió.