【问题标题】:Cookie data size exceeds 4K - But its 'only' 1100 bytes encryptedCookie 数据大小超过 4K - 但其“仅”1100 个字节已加密
【发布时间】:2012-02-29 23:00:15
【问题描述】:

我有一个使用 Rack::Session::Cookie 的 Sinatra 应用程序

use Rack::Session::Cookie, :key => 'my.key',
                           :path => '/',
                           :expire_after => 3600, # In seconds
                           :secret => 'something'

我在会话中有一个地方设置数据,我在 erb 调用之前对会话进行转储,大约 600 字节

  puts "session is #{session.inspect}" ==> 400 bytes of text

然后我得到

Warning! Rack::Session::Cookie data size exceeds 4K.
Warning! Rack::Session::Cookie failed to save session. Content dropped.

有趣的是,这一切似乎都在起作用,因为我在会话中设置的所有内容都会在下一次点击时返回给我。 Safari 开发窗口中报告的会话大小为 1195 字节,看起来都是加密的,等等。

关于如何发生这种情况的任何想法?该消息似乎是虚假的,但查看 Rack:Session 代码 - 似乎正在转储某些东西......

【问题讨论】:

  • 如果您对会话所需的数据量感兴趣,则 session.inspect 不是您想要检查的内容。像Marshal.dump(session.to_hash) 这样的东西更接近标记
  • 如果我将会话作为字符串获取,然后调用 Marshall.dump,然后进行加密,我得到 1300 个字节,这与我看到的 cookie 匹配。所以仍然没有运气弄清楚。
  • pst 是绝对正确的。在您的 Rack gem 代码中找到消息“数据大小超过”并在那里添加检查语句。
  • 如果我错误地抢救了一个异常,而不是将其消息存储到会话中(通过使用 flash()),而是保存了整个对象,那么我在 rails 中就发生了这种情况。例如。 flash(exception.to_s) 版本 flash(exception)。检查您是否没有在会话中保存意外值。
  • 是否因为您的域的 cookie 集总共超过 4K 而引发错误?

标签: ruby session cookies sinatra rack


【解决方案1】:

弗雷德是对的。 session.inspect 不会显示 cookie 字符串长度的确切大小。您可以使用 tcpdump 更好地了解它的大小;

tcpdump -s 1500 -A 主机和端口

然后发出请求并检查 cookie 数据的实际 ascii 转储。

lal00 很可能是真正的潜在问题

【讨论】:

    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2022-04-20
    • 1970-01-01
    • 2020-06-22
    • 2014-12-18
    相关资源
    最近更新 更多