Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何检查rails中会话的大小?_Ruby On Rails_Session_Session Cookies - Fatal编程技术网

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

Ruby on rails 如何检查rails中会话的大小?,ruby-on-rails,session,session-cookies,Ruby On Rails,Session,Session Cookies,我希望session.size、session.length或session.count能够工作,但它们都返回“undefined method”。为什么,会话不是散列吗 那是好奇。实际的问题是:有没有办法检查会话的大小(KB)?目前,我的会话存储在cookie中,它有4KB的限制,当它超过这个限制时,它就会停止将新数据放入其中。最好知道何时发生,重置会话或删除旧数据 以下是rails如何获得会话大小: 首先,获取会话数据,请参见() 然后它将加密数据,请参见(): 最后,获取字节: data.

我希望
session.size
session.length
session.count
能够工作,但它们都返回“undefined method”。为什么,
会话
不是散列吗


那是好奇。实际的问题是:有没有办法检查会话的大小(KB)?目前,我的会话存储在cookie中,它有4KB的限制,当它超过这个限制时,它就会停止将新数据放入其中。最好知道何时发生,重置会话或删除旧数据

以下是rails如何获得会话大小:

首先,获取会话数据,请参见()

然后它将加密数据,请参见():

最后,获取字节:

data.bytesize
您可以直接获取会话
数据
,但手动加密很困难。我通常在gem代码处添加日志以检查数据:

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

puts options[:value].bytesize

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

为什么要在会话中存储4KB?!我确信有更好的方法来实现这一点。比如说,不是我,我只是在调查会话过载的bug。不管怎么说,这主要发生在开发过程中,对于实际用户来说不太可能发生,但如果有一个备份解决方案就好了。我认为通过计算,你只是在对抗症状,而不是实际问题:为什么会话中有4KB?他们来自哪里?如何将这些数据存储到其他地方?它们来自于打开大量新的答案页面,创建新的应答者,并将id存储在会话中(以便稍后可以从同一台机器继续回答)。还有加密字符串,但我不认为我应该修补它们。我不知道,它的实现非常简单。看到这一点,我不再使用rails了,所以我无法检查,但无论如何我都会接受这一点,看起来不错。感谢接受我的回答@Simoroshka。我刚刚遇到了
CookieOverflow
问题,所以我找到了这个方法来检查我的实际会话大小使用情况,它大于4096。
data.bytesize
options[:value] = @encryptor.encrypt_and_sign(serialize(name, options[:value]))

puts options[:value].bytesize

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