簡體   English   中英

為什么Rails會為同一會話的每個請求更改Set-Cookie標頭

[英]Why Rails change Set-Cookie header every request for the same session

我正在使用基於cookie的會話存儲的Rails 4,發現每次刷新頁面時Rails 4都會給我一個不同的cookie,但它仍然可以識別我。

將它與另一個使用Rack::Session::Cookie機架應用相比較,它只會為第一個請求發送Set-Cookie ,直到對會話數據進行了一些更改。

他們為什么設計不同? 背后有什么理由嗎?

這是因為Rails處理會話存儲和cookie加密的方式:

  1. 默認會話存儲將嘗試將會話數據寫入已訪問會話的任何請求的加密cookie(要么從中讀取或寫入它),
  2. 即使純文本值沒有,加密值也會改變,
  3. 加密發生在它到達負責檢查cookie值是否已更改以避免冗余Set-Cookie標頭的代碼之前。

我在回答這個問題時會詳細介紹: 為什么rails會不斷發回Set-Cookie標頭?

Rails cookie_store默認使用EncryptedKeyRotatingCookieJar,並生成encrypt_and_sign值。 該值使用MessageEncryptor#_encrypt方法,該方法使用Random【cipher.random_iv】。 因此,每次相同的值都會生成不同的encrypt_and_sign結果。

暫無
暫無

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

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