如何從一個網域重新導向到另一個網域並為另一個網域設定 Cookie 或標頭?
HTTP 重定向不允許為目標設定自訂標頭或 Cookie領域。此外,瀏覽器會封鎖為與使用 Set-Cookie 標頭回應的網域不同的網域設定 Cookie。
解決方案 1:使用查詢參數重定向,然後設定 Cookie
- 重定向自域 A 到網域 B,並將存取權杖作為查詢參數傳遞。
- 網域 B 接收請求並使用令牌設定自己的 cookie。
解決方案 2:跨源與 Window.postMessage() 通訊
- 向域 A 新增一個指向域 B 的隱藏 iframe。
- 使用 Window.postMessage() 將存取權杖傳送到網域 B。
- 網域 B 將令牌儲存在 localStorage 中或使用 JS 設定 cookie。
- 向網域 A 發送令牌已儲存的訊息,並將使用者重新導向至網域 B。
解決方案 3:伺服器端令牌交換
- 使用 網域 A 中的標記指向網域 B,並使用存取權杖作為查詢參數。
- 域 B 在收到請求後使用 Set-Cookie 標頭回應。
- 使用 fetch 或 XMLHttpRequest(帶有憑證)並啟用 CORS)將令牌直接傳送到網域 B。
- 網域 B 在收到存取權杖後設定 cookie。
重要提示:
- 必須在瀏覽器設定中啟用所有 cookie,解決方案 2 和 3 才能正常運作。
- 使用 SameSite=None;解決方案 3 的 cookie 中的安全標誌。
- 解決方案 1 中的查詢字串會公開存取令牌並帶來安全風險。
- 解決方案 3 需要在目標網域上啟用 CORS,並在目標網域上啟用明確的來源規格伺服器端。
以上是如何在重定向期間為不同的網域設定 Cookie 或標頭?的詳細內容。更多資訊請關注PHP中文網其他相關文章!