2012-02-29 5 views
9

Mam app Sinatra używając Rack :: Session :: Cookierozmiar danych Cookie przekracza 4K - Ale jej „tylko” 1100 bajtów szyfrowane

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

Mam jedno miejsce w sesji, gdzie ustawić dane, i zrobić zrzut sesji, czyli około 600 bajtów tuż przed wywołaniem erb

puts "session is #{session.inspect}" ==> 400 bytes of text 

Potem dostać

Warning! Rack::Session::Cookie data size exceeds 4K. 
Warning! Rack::Session::Cookie failed to save session. Content dropped. 

Fun Wygląda na to, że wszystko działa, ponieważ wszystko, co ustawiam na sesji, wraca do mnie podczas kolejnego uderzenia. Rozmiar sesji zgłoszony w oknie programowania Safari wynosi 1195 bajtów i wszystko wygląda na zaszyfrowane itp.

Jakieś pomysły na to, jak to może się dziać? Wygląda na to, że wiadomość jest fałszywa, ale patrząc na kod Rack: Session - wydaje się, że coś jest wyrzucane ...

+4

Czy to stara wartość ciasteczek? –

+0

session.inspect nie jest tym, co chcesz sprawdzić, jeśli interesuje Cię ilość danych wymaganych przez sesję. Coś jak 'Marshal.dump (session.to_hash)' jest bliżej znaku –

+0

Jeśli otrzymam sesję jako ciąg znaków, to wywołaj Marshall.dump, a następnie zaszyfruję, otrzymuję 1300 bajtów, co pasuje do tego, co widzę jako ciastko. Więc wciąż nie ma szczęścia, żeby to zrozumieć. –

Odpowiedz

2

Fred ma rację. session.inspect nie pokazuje dokładnego rozmiaru długości łańcucha cookie. Możesz użyć tcpdump, aby lepiej zrozumieć jego rozmiar;

tcpdump -s 1500 -A hosta i port

następnie dokonać żądania i sprawdzić rzeczywisty zrzut ASCII danych cookies.

Prawdopodobieństwo, że lal00 wchodzi w rzeczywisty problem podstawowy

Powiązane problemy