iframe 跨域傳遞 cookie

2021-10-11 02:08:35 字數 1057 閱讀 7354

最近在處理 iframe 跨域通訊(也就是postmessage的應用,有興趣可以看一下我的文章),發現了個比較頭疼的問題:在 iframe 環境中,無法跨域讀取內嵌網頁的 cookie ,得到的結果都是空值。

本來原計畫構思,iframe 通過 postmessage 實現跨域資料共享,但這個問題的出現讓我蛋碎不已…(´༎ຶд༎ຶ`)

如果不解決,前面的努力就等於全白搭了。

於是乎我便開始了各種查文件和解決方案。據文件說明:

chrome 51 開始,瀏覽器的 cookie 新增加了乙個samesite屬性,用來防止 csrf 攻擊和使用者追蹤。

cookie 的 samesite 屬性用來限制第三方 cookie,從而減少安全風險。

在 chrome 80 版本之後,samesite 將預設設定為 lax.

詳細可以檢視阮一峰的《cookie 的 samesite 屬性》,裡面有很明了的說明。

折騰良久後的結論:如果想用 iframe 無感知的實現 cookie 跨域共享,你是繞不開瀏覽器的限制的。除非瀏覽器是你做的,不然下面的方案是你唯一的出路… ╥﹏╥

想要讀取內嵌網頁網域名稱下的 cookie ,你得把 cookie 的 samesite 屬性設定為 none,也就是忽略同域限制;同時,設定 secure ,僅允許在https的環境中使用。

php:

header

('set-cookie: key=value; samesite=none; secure'

);

js:

document.cookie =

"key=value; samesite=none; secure"

注意,單一設定 samesite 為 none 是不生效的,必須同時設定 secure ;而開始 secure 之後,http 和 https協議的cookie是不互通的,小心別踩坑。

iframe跨域通訊

簡述 window.postmessage方法,允許跨視窗通訊,不論這兩個視窗是否同源。視窗都可以通過message事件,監聽對方的訊息。語法 otherwindow.postmessage message,targetorigin,transfer message 傳送的內容。targetorgi...

iframe解決跨域

iframe的使用a域中有parent.html,b域中有child.html.b域中的伺服器要監聽所有b域下所有child.html,並且兩個域之間要交換資料.那麼在a域中嵌入iframe 如 parent.html document.domain ip a域的ip或網域名稱 去掉www 函式fu...

iframe跨域訪問

子iframe使用jquery訪問父頁面時,報錯uncaught domexception blocked a frame with origin url from accessing a cross origin frame.這是跨域導致的 設host 進行網域名稱重定向,開啟c windows ...