Cookie在轨道应用程序溢出?

UsersController#create中的ActionDispatch :: Cookies :: CookieOverflow

当我尝试打开页面时出现此错误。 我不知道如何debugging这个错误。 你有这个问题的build议吗?

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 end def sign_in(user) cookies.permanent.signed[:remember_token] = [user.id, user.salt] session[:current_user] = user current_user = user end 

你可以在cookie中存储4KB的限制,当Rails将你的对象转换为写入cookie的文本时,它可能会超过这个限制。

Ruby on Rails的ActionDispatch::Cookies::CookieOverflow错误

这样CookieOverflow错误发生。

解决这个问题最简单的方法是,你需要改变你的session_store,不要使用cookie_store 。 您可以通过示例使用active_record_store

这是步骤

  1. 生成创build会话表的迁移

     rake db:sessions:create 
  2. 运行迁移

     rake db:migrate 
  3. 修改config/initializers/session_store.rb

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

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

一旦你完成了这三个步骤,重新启动你的应用程序。 Rails现在将使用会话表来存储会话数据,并且不会有4kb的限制。

要使Rails 4/5中的:active_record_storefunction:active_record_store ,您必须将activerecord-session_store gem添加到您的Gemfile

 gem 'activerecord-session_store' 

然后运行迁移生成器:

 rails generate active_record:session_migration 

最后在config/initializers/session_store.rb设置你的会话存储:

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

更新:

如果任何人null value in column "session_id" violates not-null constraint收到null value in column "session_id" violates not-null constraint了rails 4中的null value in column "session_id" violates not-null constraint消息,那么在github (未testing)中有一个解决方法 。 你必须用ActiveRecord::SessionStore::Session.attr_accessible :data, :session_id创build一个初始化器ActiveRecord::SessionStore::Session.attr_accessible :data, :session_id

该错误消息清楚地表明存在溢出的Cookie存储大小的问题。

您的会话(默认情况下,在Cookie中)需要移动到活动logging存储或Memcache存储来解决此问题。

对于数据库会话:

 config.action_controller.session_store = :active_record_store 

您需要如下创build会话表

 rake db:sessions:create rake db:migrate 

要么

对于Memcache会话:

 config.action_controller.session_store = :mem_cache_store 

您还需要设置一个caching服务器并将其configuration如下:

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

在会话中存储模型对象并不是一个好主意。

看看这个主题上的这个railscast: http ://railscasts.com/episodes/13-dangers-of-model-in-session?autoplay=true

在会话中存储id(在这种情况下是用户的id)是一个更好的做法。 那么你不会有这个问题。

(见上面的Frederick Cheung评论)。

我在运行规格时出现了这个错误。 将Capybara从1.x更新为2.x后。 只是耙tmp:清楚解决了它。

如果你看到这个,检查你是不是吹了一些会议的数据。 在我的情况下,成千上万的相同的消息被input到Flash消息中。 只是说。