簡體   English   中英

在基於Cookie的會話存儲的Rails中,會話和cookie是一回事

[英]In Rails, with cookie-based session store, are session and cookies the same thing

我一直在使用基於cookie的會話存儲,直到現在為止都不知道Cookies 那么在任何情況下我都需要cookie哈希嗎?

Cookies哈希在Rails應用中絕對有價值。 您應該使用Cookie在會話之間要記住的客戶端上存儲值。

“記住我”令牌就是一個很好的例子。 如果您想允許用戶在訪問您的網站時自動登錄,只需存儲一個持久性cookie,其中包含一些用戶防篡改值(例如,唯一的哈希或guid(良好),該值映射到您數據庫中該用戶的行,但不能像僅使用普通的舊整數用戶ID(錯誤)一樣被黑客入侵。 然后,當用戶訪問您的站點時,您可以檢查cookie哈希以獲取“記住我”令牌,如果找到該令牌,則可以在數據庫中進行查找,如果找到匹配項,則將用戶登錄。 這是很常見的做法。

如果您需要/想要在客戶端cookie中存儲純文本值,但又不想讓用戶使用這些值,則只需將該值的哈希值存儲在伴隨cookie中,然后對哈希值加一些未知的值給用戶。 然后,您只需要計算從客戶端cookie接收到的純文本值的鹽化哈希值,並將其與同樣從客戶端cookie傳遞來的哈希值進行比較即可。 如果它們匹配,您可以信任它。

cookie會話存儲似乎可以很好地解決任何可能使用cookie的情況。 從最終用戶可以讀取會話數據但不能對其進行修改的角度而言,rails cookie會話存儲是安全的。

是的,我在考慮如何將cookie與會話之間的關系感到困惑時,在思考如何為OpenID登錄實現記住我的方法……這與基於密碼的登錄實際上並沒有什么不同。 但這不是我的代碼,它來自restful-authentication插件,沒有什么比自己考慮整個過程更重要了。

您不應該存儲任何您不希望用戶看到或更改的Cookie。 如果您存儲成員ID,則用戶可以輕松更改值並假裝為其他人。 Cookies還會隨每個單獨的請求一起發送到您的Web服務器,包括圖像,JS和CSS請求。 如果您在Cookie中存儲大量信息,則可能會影響速度。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM