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 檔案。具體方...