如何检查rails中的会话大小?
我希望session.size
, session.length
或session.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