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

我希望session.sizesession.lengthsession.count可以工作,但它们都返回“未定义的方法”。 为什么, session不是哈希?

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

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

首先,获取会话数据,参见( 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 

您可以直接获取会话data但很难手动加密。 我通常在gem代码中添加一个日志来检查数据:

 options[:value] = @encryptor.encrypt_and_sign(serialize(name, options[:value])) puts options[:value].bytesize raise CookieOverflow if options[:value].bytesize > MAX_COOKIE_SIZE