【问题标题】:Rails 3 Cookie Based Sessions QuestionRails 3 基于 Cookie 的会话问题
【发布时间】:2011-04-11 12:33:17
【问题描述】:

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

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

u = session[:user]
u.add_this lots_of_data

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,完全正确。换句话说,当您可以只存储它们的数据库 ID 时,不要在会话中存储整个模型。
    • 对。确切地!仍然存在的问题是,当您在服务器上填充模型时,模型本身是否会在 cookie 中填充并变得越来越大?
    • 如果你把 id 放在 session 中,你将在 session 中拥有 id,仅此而已。如果在会话中放置一个完整的对象(如上面的示例),它将占用序列化对象所需的尽可能多的空间......
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2011-04-29
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多