2008-11-21 127 views

回答

6

Cookie散列在Rails應用程序中肯定有價值。 您應該使用cookie在客戶端存儲要在會話之間記住的值。

「記住我」令牌就是一個很好的例子。如果你想允許用戶在訪問你的網站時自動登錄,只需要存儲一個持久的cookie,用一些用戶防篡改值(比如映射到你的數據庫中該用戶行的獨特散列或guid(good)),但是不是像只使用普通的舊整數用戶ID(壞)hackable)。然後,當用戶訪問您的網站時,您可以檢查記憶我記號的cookie哈希值,如果找到,請在您的數據庫中進行查找,並在發現匹配時將用戶登錄。這是一種非常普遍的做法。

如果您需要/希望將明文值存儲在客戶端cookie中,但不希望用戶能夠使用這些值,只需將該值的散列值存儲在伴隨cookie中並加上散列值具有用戶未知的某些值。然後,您只需計算從客戶端cookie收到的明文值的哈希散列值,並將其與從客戶端cookie傳遞的散列值進行比較。如果他們匹配,你可以信任它。

-1

您不應該存儲任何您不希望用戶在Cookie中查看或更改的內容。如果你存儲了一個成員ID,那麼用戶可以很容易地改變它的值並假裝成其他人。 Cookies也隨每個請求發送到您的Web服務器,包括圖像,JS和CSS請求。如果您在cookie中存儲大量信息,這可能會影響速度。

基於Cookie的會話(在一般情況下,我不能說我知道Rails會做什麼)意味着您的會話變量與隨機生成的會話ID相關聯。此ID和唯一的ID將作爲cookie返回給用戶。這允許您將用戶請求(因爲您擁有會話ID cookie)與用戶的會話相關聯。這比較安全,因爲有人猜測另一個用戶會話的ID很困難。

+0

Rails cookie會話中的實際信息存儲在cookie中,因此會話中可以存儲的內容有4k限制。將敏感信息保留在cookie會話之外,或者使用不同的會話方法。 – Tilendor 2008-11-24 04:47:13

+0

4k限制在某些瀏覽器中未實施,或者至少不完全正確。最近在Firefox發送16K cookie的應用程序中出現問題。這是毛病。 – 2010-07-10 00:11:21

0

是的我在爲思考如何實現記住我的OpenID登錄時,對cookie與會話的關係感到非常困惑......實際上,這與實現基於密碼的登錄沒有區別。但那不是我的代碼,它來自於寧靜認證插件,沒有什麼事情像你自己想想整個過程。

1

任何可能使用cookie的情況似乎都由cookie會話存儲提供。軌道cookie會話存儲是安全的,因爲最終用戶可以讀取會話數據但無法修改它。