111 votes

Débordement de cookie dans l'application rails?

ActionDispatch :: Cookies :: CookieOverflow dans UsersController # create

J'ai cette erreur lorsque j'essaie d'ouvrir la page. Je ne sais pas comment déboguer cette erreur. Avez-vous une suggestion pour ce problème?

 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<it>! "
  redirect_to @user
  else
  @title = "Sign up"
  render 'new'
end
 

fin

 def sign_in(user)
    cookies.permanent.signed[:remember_token] = [user.id, user.salt]
    session[:current_user] = user
    current_user = user
end
 

162voto

Amit Pandya Points 3495

Vous avez une limite de 4 ko sur ce que vous pouvez stocker dans un cookie, et lorsque Rails convertit votre objet dans un texte de l'écriture pour le cookie, c'est probablement plus grande que celle de la limite.

Ruby on Rails ActionDispatch::Cookies::CookieOverflow d'erreur

C' CookieOverflow d'Erreur se produit.

La meilleure façon de résoudre celui-ci est, vous avez besoin de changer votre session_store et de ne pas utiliser l' cookie_store. Vous pouvez utiliser l' active_record_store par exemple.

Voici les étapes

  1. Générer une migration qui crée la table de session

    rake db:sessions:create
    
  2. Exécuter la migration

    rake db:migrate
    
  3. Modifier config/initializers/session_store.rb de

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

    pour

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

Une fois que vous avez fait en trois étapes, de redémarrer l'application. Rails allons maintenant utiliser la table des sessions pour stocker les données de session, et vous n'aurez pas la limite de 4 ko.

82voto

Alter Lagos Points 1527

Pour faire de l' :active_record_store fonctionnalité fonctionne dans les Rails 4, vous devez ajouter à votre gemfile:

gem 'activerecord-session_store', github: 'rails/activerecord-session_store'

puis exécuter la migration générateur:

rails generate active_record:session_migration

Et enfin définir votre session de stocker dans le fichier config/initializers/session_store.rb:

Foo::Application.config.session_store :active_record_store

Mise à JOUR:

Si quelqu'un est à la réception d'un null value in column "session_id" violates not-null constraint message, il y a une solution de contournement dans github(pas testé). Vous devez créer un initialiseur avec ActiveRecord::SessionStore::Session.attr_accessible :data, :session_id

10voto

Zack Xu Points 1531

Ce n'est pas une bonne idée de stocker un objet de modèle dans la session.

Découvrez cette diffusion sur ce sujet: http://railscasts.com/episodes/13-dangers-of-model-in-session?autoplay=true

Il est préférable de stocker l'identifiant (l'identifiant de l'utilisateur dans ce cas) dans la session. Alors vous n'aurez pas ce problème.

(Voir le commentaire de Frederick Cheung ci-dessus également).

9voto

Ved Prakash Points 7244

le message d'erreur indique clairement le problème avec la banque de cookies taille de débordement.

Vos sessions (par défaut dans le cookie) doit être déplacé à l'enregistrement Actif magasin ou memcache magasin pour résoudre ce problème.

Pour les sessions de base de Données:

config.action_controller.session_store = :active_record_store

Vous devez créer la table de session ci-dessous

rake db:sessions:create
rake db:migrate

OU

Pour Memcache sessions:

config.action_controller.session_store = :mem_cache_store

Aussi, vous devez configurer un mem cache du serveur et le configurer comme ci-dessous:

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

1voto

Artur79 Points 1284

Cette erreur est apparue pour moi lorsque j'exécutais une spécification. Après avoir mis à jour Capybara de 1.x à 2.x. Il suffit de ratisser tmp: effacer résolu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X