在Ruby 1.9.3中使用Mongoid 3.1和Sinatra编写应用程序。我有一个名为Order的模型has_many Items。每当我尝试将一个Item附加到Order.items时,我就会遇到问题。我有以下路线,总结一下:
order = session[:user].get_order(Time.now)
order.items << Item.new
order.save
"Hi, mom!" # Garbage page so that I know nothing else is called.
一次这样做是可以的;两次这样做会导致以下错误:
Warning! Rack::Session::Cookie data size exceeds 4K.
Warning! Rack::Session::Cookie failed to save session. Content dropped.
我一直在撞墙,试图让它停止这样做。为什么会话加载我的所有项目?我没有正确使用has_many关系吗?
答案 0 :(得分:1)
您的User
模型可能has_many :orders
。 Ruby可能会调用Marshal.dump
将您的用户对象转储到cookie中。你可以想象这可能会变得巨大。您应该执行以下操作:
您需要使用不同的中间件来存储会话服务器端。有关在memcache中存储会话的示例,请参阅this page。由于您已经在使用mongo,因此可以使用Rack::Session::Mongo。
即使您没有使用Rails,Rails会话安全指南也很有用。 [link]