1

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

我遇到了一些问题,我有一个 cookie 溢出错误,我假设是因为我不断添加到我的用户实例(它也是从 cookie 链接/获取的)。

u = session[:user]
u.add_this lots_of_data

所以最终我得到了一个cookie溢出错误。

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

4

2 回答 2

5

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

但是,如果您在会话中存储模型对象或“大量数据”,那么您很可能一开始就做错了。您的数据应该进入数据库,并且会话应该只包含您需要检索它的信息。

在您的情况下,这意味着将用户 ID 存储在他的会话中,并将用户从数据库加载到 before_filter 中。

于 2010-09-13T07:11:17.970 回答
0

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

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

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

于 2011-01-20T09:21:16.140 回答