跨域傳遞cookie

2021-08-07 19:22:40 字數 1734 閱讀 7607

cookie基本使用

首先,需要在服務端返回的頭部資訊中增加:

response.setheader(「access-control-allow-origin」,「

cors請求預設不傳送cookie和http認證資訊。如果要把cookie發到伺服器,一方面要伺服器同意,指定access-control-allow-credentials欄位。

access-control-allow-credentials: true
另一方面,開發者必須在ajax請求中開啟withcredentials屬性。

crossdomain: true,否則,即使伺服器同意傳送cookie,瀏覽器也不會傳送。或者,伺服器要求設定cookie,瀏覽器也不會處理。

需要注意的是,如果要傳送cookie,access-control-allow-origin就不能設為星號,必須指定明確的、與請求網頁一致的網域名稱。同時,cookie依然遵循同源政策,只有用伺服器網域名稱設定的cookie才會上傳,其他網域名稱的cookie並不會上傳,且(跨源)原網頁**中的document.cookie也無法讀取伺服器網域名稱下的cookie。

這裡糾正乙個誤區,不是設定了cookie的domain引數,cookie就可以被跨域傳輸的。 其實,cookie的domain屬性所說的跨域,確切地說,應該是跨子域(subdomain)。比如我在bbs.readlog.cn這個子域(這裡是二級網域名稱)下設定的cookie,如果不特別的設定domain屬性,那這個cookie就只能被bbs.readlog.cn這個子域下的程式讀到,至於www.readlog.cn是無法讀取到這個cookie的,而我如果在bbs.readlog.cn設定cookie的時候,設定cookie的domain屬性為readlog.cn,那麼所有的子域就都可以讀到這個cookie了。 其實仔細想一下,也會知道所謂跨域a.com去讀取b.com的cookie僅僅通過cookie的domain屬性是行不通的,如果這樣是可以的,那無疑是乙個巨大的安全隱患。

關於cookie的domain屬性詳解:

在任何網域名稱下,cookie的domain引數都只能指定為當前網域名稱或上級網域名稱(包括上級的上級,等等),此外都是無效的。

如:在t.a.b.com下,指定domain為t.a.b.com、a.b.com、b.com都是可行的。

在domain的引數前,是否存在符號「.」是完全相同的。

如:domain=a.b.com和domain=.a.b.com是完全相同的。

指令碼只可訪問domain引數設定為當前網域名稱或上級網域名稱(包括上級的上級,等等)的cookie,以及當前網域名稱下設定的沒有domain引數的

cookie。

如果不指定domain,則cookie無法在其他任何網域名稱下被訪問,即使是子網域名稱。

指定domain與不指定domain的cookie是不相同的,即使下面的情況所產生的cookie也是不同的:

case1:在a.b.com下,設定無domain引數的cookie。

case2:在a.b.com下,設定domain=a.b.com的cookie。

case1和case2所生成的cookie是完全不同的。

跨域請求傳遞Cookie

通過cors跨域時,瀏覽器不會自動帶上cookie。想要傳遞cookie,需要客戶端與服務端共同設定。服務端需要設定 access control allow origin 該欄位表明服務端接收哪些網域名稱的跨域請求,如果值為 號,表示接收任意網域名稱的跨域請求。當需要傳遞cookie時,acces...

iframe 跨域傳遞 cookie

最近在處理 iframe 跨域通訊 也就是postmessage的應用,有興趣可以看一下我的文章 發現了個比較頭疼的問題 在 iframe 環境中,無法跨域讀取內嵌網頁的 cookie 得到的結果都是空值。本來原計畫構思,iframe 通過 postmessage 實現跨域資料共享,但這個問題的出現...

Django跨域請求無法傳遞Cookie

問題 在使用 django vue 進行前後端分離開發時,發現在跨域訪問情況下,後台 httpresponse 在使用set cookie方法後,瀏覽器無法獲取 cookie。解決方法 django 端使用django cors headers解決跨域問題,修改 settings.py 檔案。具體方...