2012-02-29 28 views
9

Tôi có một ứng dụng Sinatra sử dụng rack :: phiên :: Cookiekích thước dữ liệu Cookie vượt 4K - Nhưng 'chỉ' 1100 byte của nó được mã hóa

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

Tôi có một chỗ trong phiên nơi tôi thiết lập dữ liệu, và tôi làm một bãi chứa của phiên làm việc, đó là khoảng 600 byte ngay trước khi cuộc gọi eRB

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

Sau đó, tôi nhận được

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

Fun Điều ny là, tất cả có vẻ là làm việc, trong đó tất cả mọi thứ tôi đặt trên phiên trở lại với tôi về hit tiếp theo. Kích thước phiên như được báo cáo trong cửa sổ phát triển Safari là 1195 byte và tất cả đều được mã hóa, v.v.

Bất kỳ ý tưởng nào về điều này có thể xảy ra như thế nào? Có vẻ như thông báo là giả mạo, nhưng nhìn vào mã Rack: Session - có vẻ như đang bị bán phá giá ...

+4

Đây có phải là giá trị cookie cũ không? –

+0

session.inspect không phải là thứ bạn muốn kiểm tra nếu bạn quan tâm đến lượng dữ liệu mà phiên yêu cầu. Một cái gì đó giống như 'Marshal.dump (session.to_hash)' là gần hơn với nhãn hiệu –

+0

Nếu tôi nhận được phiên làm chuỗi, sau đó gọi Marshall.dump, tiếp theo là mã hóa, tôi nhận được 1300 byte, khớp với những gì tôi thấy dưới dạng bánh quy. Vì vậy, vẫn không có may mắn trong việc tìm ra nó. –

Trả lời

2

Fred đúng. session.inspect sẽ không hiển thị cho bạn kích thước chính xác của độ dài chuỗi cookie. Bạn có thể sử dụng tcpdump để có ý tưởng tốt hơn về kích thước của nó;

tcpdump -s 1500 chủ -A và cổng

Sau đó thực hiện theo yêu cầu và kiểm tra các bãi ascii thực tế của dữ liệu cookie.

lal00 có thể xuất hiện vấn đề cơ bản thực sự

Các vấn đề liên quan