你有一個錯字在你post
路線:
session["value"] == @cal
# ^^ compares for equality, does not set.
這不會影響會議,而只是評估要麼true
或(更可能)false
。
什麼樣的對象@cal
,你用什麼爲你的會議支持? (難道這些cookie的支持會話,又名Rack::Session::Cookie
,通過enable :sessions
啓用?如果是這樣,你的目標肯定能夠通過元帥被序列化?)
編輯
是的,如果你解決這個錯字,是什麼你應該工作。
這是一個測試應用程序,它爲我的作品...
require 'sinatra'
enable :sessions
get('/'){ haml :show_and_go }
post '/' do
session["foo"] = [[[1,2],[3,4]],[5,6]]
"Now get it!\n"
end
__END__
@@show_and_go
%p= session["foo"].inspect
%form(method='post' action='/')
%button go
...這裏是它的實際測試。我們看到沒有cookie的情況下你不會得到任何會話,但是一旦cookie被寫入,下一個請求就會工作。該作品一樣好瀏覽器,太:
phrogz$ cat cookies.txt
cat: cookies.txt: No such file or directory
phrogz$ curl http://localhost:4567/ # GET
<p>nil</p>
<form action='/' method='post'>
<button>go</button>
</form>
phrogz$ curl -d "" -c cookies.txt http://localhost:4567 # POST
Now get it!
phrogz$ curl -b cookies.txt http://localhost:4567 # GET, with cookies
<p>[[[1, 2], [3, 4]], [5, 6]]</p>
<form action='/' method='post'>
<button>go</button>
</form>
這個唯一的「不正確的方式」是,根據您的數組的大小,使用的cookie支持的會話可能是短暫的很多信息從那時起響應和請求的cookie。需要「base64」有多大? Base64.encode64(Marshal.dump(@cal))。length'? – Phrogz
@Progro當我運行它時,它給了我'6666'是那麼大? –
是的;超過4k的任何內容都不能保證能夠正常工作,並且在許多瀏覽器中無法使用。您應該考慮使用更好的會話存儲,例如內存支持,文件支持或數據庫支持的會話。 – Phrogz