Размер данных cookie превышает 4K - но его «только» 1100 байт зашифрованы - PullRequest
9 голосов
/ 01 марта 2012

У меня есть приложение Sinatra, использующее Rack :: Session :: Cookie

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

У меня есть одно место в сеансе, где я устанавливаю данные, и я делаю дамп сеанса, который составляет около 600 байтов прямо перед вызовом erb

  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 - кажется, что что-то сбрасывается ...

1 Ответ

3 голосов
/ 12 июня 2012

Фред прав. session.inspect не собирается показывать вам точный размер длины строки cookie. Вы можете использовать tcpdump, чтобы лучше понять его размер;

tcpdump -s 1500 -A хост и порт

Затем сделайте запрос и проверьте фактический дамп ascii данных cookie.

lal00, вероятно, относится к реальной основной проблеме

...