首頁  >  文章  >  後端開發  >  如何在重定向期間為不同的網域設定 Cookie 或標頭?

如何在重定向期間為不同的網域設定 Cookie 或標頭?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-01 03:19:28297瀏覽

How to Set Cookies or Headers for a Different Domain During a Redirect?

如何從一個網域重新導向到另一個網域並為另一個網域設定 Cookie 或標頭?

HTTP 重定向不允許為目標設定自訂標頭或 Cookie領域。此外,瀏覽器會封鎖為與使用 Set-Cookie 標頭回應的網域不同的網域設定 Cookie。

解決方案 1:使用查詢參數重定向,然後設定 Cookie

  1. 重定向自域 A 到網域 B,並將存取權杖作為查詢參數傳遞。
  2. 網域 B 接收請求並使用令牌設定自己的 cookie。

解決方案 2:跨源與 Window.postMessage() 通訊

  1. 向域 A 新增一個指向域 B 的隱藏 iframe。
  2. 使用 Window.postMessage() 將存取權杖傳送到網域 B。
  3. 網域 B 將令牌儲存在 localStorage 中或使用 JS 設定 cookie。
  4. 向網域 A 發送令牌已儲存的訊息,並將使用者重新導向至網域 B。

解決方案 3:伺服器端令牌交換

  1. 使用 如何在重定向期間為不同的網域設定 Cookie 或標頭?網域 A 中的標記指向網域 B,並使用存取權杖作為查詢參數。
  2. 域 B 在收到請求後使用 Set-Cookie 標頭回應。
  3. 使用 fetch 或 XMLHttpRequest(帶有憑證)並啟用 CORS)將令牌直接傳送到網域 B。
  4. 網域 B 在收到存取權杖後設定 cookie。

重要提示:

  • 必須在瀏覽器設定中啟用所有 cookie,解決方案 2 和 3 才能正常運作。
  • 使用 SameSite=None;解決方案 3 的 cookie 中的安全標誌。
  • 解決方案 1 中的查詢字串會公開存取令牌並帶來安全風險。
  • 解決方案 3 需要在目標網域上啟用 CORS,並在目標網域上啟用明確的來源規格伺服器端。

以上是如何在重定向期間為不同的網域設定 Cookie 或標頭?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn