Rails 3基于Cookie的会话问题

时间:2010-09-13 06:23:59

标签: ruby-on-rails session cookies overflow session-cookies

使用Rails 3,默认会话存储机制是cookie_store。我假设这意味着会话哈希中的内容被序列化,编码并存储在浏览器中的cookie中?这是否意味着会话中没有(或很少)存储在服务器中?

我遇到了一些问题,我遇到了cookie溢出错误而且我正在假设,因为我一直在添加到我的用户实例(也是从cookie中链接/获取)。

u = session[:user]
u.add_this lots_of_data

所以最终我收到了cookie溢出错误。

我对此是否正确?会话是否完全存储在Rails 3中的cookie中(默认情况下)?

2 个答案:

答案 0 :(得分:5)

是的,如果您使用cookie商店,会话数据将存储在cookie中。如果您想将其存储在服务器上,则需要使用另一个会话存储。

但是,如果您在会话中存储模型对象或“大量数据”,那么您最有可能在第一时间做错了。您的数据应该转到数据库,并且会话应该只包含您需要检索它的信息。

在这种情况下,这意味着在会话中存储用户id,并在before_filter中从db加载用户。

答案 1 :(得分:0)

是的,你是对的。如果您继续向会话添加数据,则可能会出现此问题。 但还有一些其他因素会影响它。

有一次,我最终得到了CookieOverflow错误,原因是flash [:notice]消息。

如果使用flash [:notice] =“message”然后重定向,则文本“message”将存储在cookie中。如果文本u的大小超过4KB,则会出现“CookieOverflow”错误