這是session[:food]="pizza"
和cookies.permanent[:food]=pizza
之間的區別?
我試圖讀取的軌道文檔和它說:
差[:食品] cookies.permanent和[:食品]
梁2引入了一個新的默認會話存儲,的CookieStore。 CookieStore將會話散列直接保存在客戶端的Cookie中。
然後我不明白,如果會議[:食品]被保存在一個cookie中,所以cookies.permanent [:食品]做的,有什麼區別?
這是session[:food]="pizza"
和cookies.permanent[:food]=pizza
之間的區別?
我試圖讀取的軌道文檔和它說:
差[:食品] cookies.permanent和[:食品]
梁2引入了一個新的默認會話存儲,的CookieStore。 CookieStore將會話散列直接保存在客戶端的Cookie中。
然後我不明白,如果會議[:食品]被保存在一個cookie中,所以cookies.permanent [:食品]做的,有什麼區別?
我建議你嘗試一下,會話數據是base64編碼在cookie(導軌3)或加密的cookie(導軌4)。使用像Firefox的Web開發擴展「(WDE)插件的工具,它有一個cookie的菜單項,用它來刪除所有cookie爲您的本地主機的網站,那麼你的代碼添加到一個控制器動作
session[:food] = "pizza"
cookies.permanent[:food] = "pizza"
現在查看使用WDE
Name food
Value pizza
Host localhost
Path /
...
VS會議
Name _session_name # (this value set in config/initializers/session_store.rb)
Value a_base_64_value
Host localhost
Path /
...
現已開放軌控制檯和解碼會話值
0123餅乾$ rails console
> Base64.decode64('value from session')
# works in rails 3
如果使用導軌4 cookie將被加密,而不僅僅是編碼,見http://cowbell-labs.com/2013-04-10-decrypt-rails-4-session.html
一次解密或解碼它看起來就像
{
"session_id"=>"xxxxx",
"user_return_to"=>"/",
"flash"=>{
"discard"=>[:alert],
"flashes"=>{
:alert=>"You need to sign in or sign up before continuing."}
},
"food"=>"pizza",
"_csrf_token"=>"xxxxx"
}
注意,在我的情況下,我使用它增加了設計消息閃光燈
會話數據得到更好的保護,你也有轉移到如數據庫不同的會話存儲在不改變任何代碼的選項,只是一些配置
如果你這樣做會話[:食品]您使用的是傳統的Rails的會議:這次會議目的是通過將其存儲在餅乾是在瀏覽器過期接近(讓你的價值「比薩」,可從頁面到頁面這意味着如果關閉瀏覽器,會話[:食品]將被銷燬)
當我們談論永久性時,我們討論永久性會話,那麼意味着什麼?
持續會話是仍然存在(「永遠」),即使你關閉瀏覽器,並沒有過期只有當你明確到期或刪除它永久的cookie。
但如何使一個仍然存在的cookie「永遠」?
如果我說「永遠」,那是因爲這是一個棘手的和做到這一點的方法是設置一個cookie過期從現在或60年的漫長時間長像20年....像這樣:
cookies[:remember token] = { value: "pizza", expires: 20.years.from now.utc }
設置,使用期限20年以後變得如此 普遍,所以Rails特別添加了永久的方法來實現它,這樣我們就可以 簡單地寫一個cookie的這種模式:
cookies.permanent[:food] = "pizza"
回答你的問題,沒有在結構上沒有區別,每一個都是一個cookie,但差別只在每一個
希望的生命週期這個幫助你
很好的解釋! – karlihnos
您可以更改會話存儲,可能與cookies不同 – apneadiving