JavaScript cookie 跨域
cookie雖然存在安全性和儲存量小等諸多缺點,被很多人詬病。
但是在其能力範圍之內,可以很方便的完成一些工作,比如儲存使用者的狀態,實現單點登入等。
不同域之間的cookie是無法訪問的,否則網際網路豈不是亂套了。
比如螞蟻部落與百度之間的cookie是無法訪問的,這非常好理解。
那是不是如下兩個網址之間的cookie是可以互相訪問:
(1).www.softwhy.com。
(2).zy.softwhy.com。
事實是,上述兩個站點無法實現cookie相互訪問,這是因為跨域了,預設只有同源才可以相互訪問。
然而很多需求是需要cookie可以跨域訪問,比如單點登入功能,一個子站登入,其他子站同步具有登入狀態。
下面將介紹一下如何利用JavaScript實現cookie跨域訪問。
特別說明:只有根域名相同的不同源的cookie才有可能實現跨域訪問,當前根域名不同不能實現跨域。
一.同源:
兩個站點同源,必須要滿足如下幾個條件:
(1).首先,協議要相同。
(2).其次,域名要相同。
(3).最後,埠號也要相同。
具體同域具體規則可以參閱同源策略詳解一章節。
cookie同源,不要求協議也必須相同,也就是http://www.softwhy.com與https://www.softwhy.com是同源。
二.cookie跨域:
預設情況下,當前域下的cookie只能被當前域下的頁面訪問。
通過JavaScript設定cookie的doamin屬性為一個恰當值即可實現跨域效果。
語法結構如下:
[JavaScript] 純文字檢視 複製程式碼document.cookie="name=value;path=path;domain=domain"
domain屬性值規定cookie跨域的範圍,cookie可以被domain屬性設定的域和其後代域訪問。
將domain屬性值設定為"softwhy.com"可以實現cookie被softwhy.com和其子域訪問。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼document.cookie="web=螞蟻部落;path=/;domain=softwhy.com"
上述程式碼可以實現跨域,此時,path屬性值通常為根目錄。
document.domain屬性可以獲取當前頁面的域名,也可以設定cookie的cookie屬性。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼document.domain
程式碼執行效果截圖如下:
在螞蟻部落首頁,谷歌開發者工具控制檯列印出當前域名。
當使用此屬性設定cookie的domain屬性時,可能的屬性值如下:
(1).當前域名。
(2).當前域名的父級域名。
如果當前頁面所在的域名是a.b.www.softwhy.com,那麼可能的屬性值如下:
[JavaScript] 純文字檢視 複製程式碼document.domain = "a.b.www.softwhy.com" document.domain = "b.www.softwhy.com" document.domain = "www.softwhy.com" document.domain = "softwhy.com"
實現了跨域,就一定可以互相訪問cookie嗎,不一定,還會受到path路徑的限制。
不過,只要在設定跨域的時候,一併將path屬性值設定為根目錄即可,這可以消除路徑的限制,前面提到過。
關於跨域和路徑的更多內容參閱cookie path路徑與domain域一章節。
相關文章
- CORS跨域cookie傳遞CORS跨域Cookie
- JavaScript跨域(1):什麼是跨域,如何跨域JavaScript跨域
- 使用PHP實現跨域COOKIEPHP跨域Cookie
- 關於Cookie跨域的問題Cookie跨域
- JavaScript-CORS 跨域JavaScriptCORS跨域
- JavaScript—掌握跨域(24)JavaScript跨域
- JavaScript 跨域彙總JavaScript跨域
- JS獲取跨域的cookie例項JS跨域Cookie
- JavaScript跨域呼叫、JSONPJavaScript跨域JSON
- 跨域請求cookie資源共享詳解跨域Cookie
- cookie跨域共享 cookie二級域名共享 前後端分離專案共享cookieCookie跨域後端
- Vue3 跨域請求攜帶cookie操作並記錄cookieVue跨域Cookie
- web跨域及cookie相關知識總結Web跨域Cookie
- JavaScript之跨域解決方式JavaScript跨域
- JavaScript跨域問題總結JavaScript跨域
- JavaScript跨域相關的總結JavaScript跨域
- 關於JavaScript跨域的若干想法JavaScript跨域
- javascript中跨域請求詳解JavaScript跨域
- 「JavaScript」四種跨域方式詳解JavaScript跨域
- jmeter學習指南之深入分析跨域傳遞cookieJMeter跨域Cookie
- 跨域問題(普通跨域和springsecurity跨域)跨域SpringGse
- javascript cookieJavaScriptCookie
- javascript如何實現跨域請求解決方案JavaScript跨域
- JavaScript 跨域總結與解決辦法JavaScript跨域
- [php]如何讓cookie實現跨域問題的原始碼例項PHPCookie跨域原始碼
- 跨域跨域
- cookie的作用域Cookie
- 跨域原理以及跨域解決方案跨域
- JavaScript 跨域訪問(API介面)實現原理分析JavaScript跨域API
- JavaScript 建立CookieJavaScriptCookie
- ajax跨域訪問時,set-cookie無效問題的解決跨域Cookie
- 【JavaScript】通過封裝自己的JSONP解決瀏覽器的跨域問題(Ajax跨域)JavaScript封裝JSON瀏覽器跨域
- 跨越域的Cookie (轉)Cookie
- HTTP跨域HTTP跨域
- nuxt跨域UX跨域
- 跨域CORS跨域CORS
- CORS跨域CORS跨域
- Vue跨域Vue跨域