如何检查 rails 中会话的大小?

How to check size of session in rails?

我希望 session.sizesession.lengthsession.count 可以工作,但它们都 return "undefined method"。为什么 session 不是散列?

那是好奇心。实际问题:有没有办法以 KB 为单位检查会话的大小?目前我的会话存储在 cookie 中,它有 4 KB 的限制,当它超过时,它就会停止将新数据放在那里。很高兴知道什么时候发生,重置会话或删除旧数据。

以下是 rails 获取会话大小的方法:

首先获取session数据,见(gems/rack/lib/rack/session/abstract/id.rb:352 commit_session)

data = session.to_hash.delete_if { |k,v| v.nil? }

然后会加密数据,见(gems/actionpack/lib/action_dispatch/middleware/cookies.rb:640):

data = @encryptor.encrypt_and_sign(serialize(name, data))

最后,获取字节:

data.bytesize

可以直接获取session data但是手动加密比较麻烦。我一般在gem代码处加个log查看数据:

options[:value] = @encryptor.encrypt_and_sign(serialize(name, options[:value]))

puts options[:value].bytesize

raise CookieOverflow if options[:value].bytesize > MAX_COOKIE_SIZE