在工作中第一次遇到跨域問題,iframe標(biāo)簽嵌入另一個(gè)系統(tǒng)的url,需要把后臺返回的鍵值對存儲到cookie里面,但要設(shè)置domain屬性;
我直接在代碼里面寫
document.cookie = 'ecc_acc=arcsabceddsf; domain=.jianshu.com';?
document.cookie='acc_key=asflnsidfsif; domain=.jianshu.com';
在本地和后臺聯(lián)調(diào)時(shí),輸出document.cookie設(shè)置的domain沒生效,一直是10.117...我的ip;
看到一個(gè)直接顯示設(shè)置doucment.domain='.jianshu.com';結(jié)果控制臺報(bào)錯(cuò):無法在document上設(shè)置domain屬性,‘.jianshu.com’不是‘10.117...’的后綴,突然明白了,他們不再同一個(gè)父級域名,我本地測試的url地址是10.117.xx.x:8080/spa/example,要訪問的是pbs.stg.jianshu.com,設(shè)置了瀏覽器也不生效。
那怎樣在本地測試是否能加載要訪問的網(wǎng)站呢?于是上網(wǎng)查資料,有的說要修改system32里面的hosts文件,
修改后還是沒有效果,本地啟動(dòng)前端代碼的時(shí)候,在dev-server.js中還有個(gè)url的地址的配置,于是把這里的url地址換成測試環(huán)境的地址,本地模擬測試環(huán)境的地址,2個(gè)地址在同一個(gè)父級域下,再把要設(shè)置的cookie的域名設(shè)置為同一個(gè)父級域名,就可以加載到pbs.stg.jianshu.com的頁面了。
假如測試環(huán)境域名為:were.stg.jianshu.com;
?例如我的系統(tǒng)是wee-ree.jianshu.com; 嵌入的系統(tǒng)是icre.dbs.jianshu.com;?
.jianshu.com是一級域名(父級域名)
wee.ere.jianshu.com二級域名(子域名)
wee.dfs.jianshu.com 二級域名(子域名)
父級域名下的cookie是共享的,子域名都可以獲取到cookie值,也可以設(shè)置父級域的cookie值。但是
設(shè)置了wee.df.jianshu.com子域名下的cookie,wee.dffs.jianshu.com訪問不到;
例如我設(shè)置cookie如下
document.cookie='username=zhangsan; domain=.jianshu.com';
則wee.were.jianshu.com和icre.dbs.jianshu.com都可以訪問這個(gè)username

cookie的domain屬性涉及到用戶單點(diǎn)登錄問題?
通常在實(shí)現(xiàn)單點(diǎn)登錄的時(shí)候會(huì)經(jīng)常用到這個(gè)屬性,通過在父級域設(shè)置Cookie,然后在各個(gè)子級域拿到存在父級域中的Cookie值。比如剛才設(shè)置的username屬性,在wee.dbs.jianshu.com下同樣可以訪問到,用戶不用重新登錄就可以拿到第一次登錄進(jìn)來時(shí)候的用戶信息,因?yàn)檫@些用戶信息都是存在父級域".jianshu.com"下面,其他頁面同yang可以拿到。
當(dāng)我在wee.dfdf.jianshu.com這個(gè)子域名下設(shè)置: document.cookie='age=24; domain=.wee.wee.jianshu.com';這個(gè)age屬性則在wee.ree.jianshu.com下是看不到的。要解決cookie的跨域問題,即把要設(shè)置的鍵值對放到父級域的cookie里面即可。