在工作中第一次遇到跨域问题,在vue项目中需要iframe标签嵌入另一个系统的url,需要把后台返回的键值对存储到cookie里面,但要设置domain属性;
我直接在代码里面写(举个栗子)
document.cookie = 'arse_acc=arcsabceddsf; domain=.jianshu.com';
document.cookie='acc_key=asflnsidfsif; domain=.jianshi.com';
和后台联调时,输出document.cookie设置的domain没生效,一直时10.117...我的ip;
在网上查资料,有的说要修改system32里面的hosts文件,但是公司的电脑C盘文件不能修改,没有权限。于是又看到一个直接显示设置doucment.domain='.jianshu.com';结果控制台报错:无法在document上设置domain属性,‘.jianshu.com’不是‘10.117...’的后缀,突然明白了,他们不再同一个父级域名,设置了浏览器也不生效。
所以只能在测试环境下测试了,假如测试环境域名为:icre.stg.jianshu.com;
例如我的系统是 icre-arse.jianshu.com; 嵌入的系统是icre.dbs.jianshu.com;
.jianshu.com是一级域名(父级域名)
icre.arse.jianshu.com二级域名(子域名)
icre.dbs.jianshu.com 二级域名(子域名) 父级域名下的cookie是共享的,子域名都可以获取到cookie值,也可以设置父级域的cookie值。但是
设置了icre.arse.jianshu.com子域名下的cookie,icre.dbs.jianshu.com访问不到;
例如我设置cookie如下
document.cookie='username=zhangsan; domain=.jianshu.com';
则icre.arse.jianshu.com和icre.dbs.jianshu.com都可以访问这个username

cookie的domain属性涉及到用户单点登录问题
通常在实现单点登录的时候会经常用到这个属性,通过在父级域设置Cookie,然后在各个子级域拿到存在父级域中的Cookie值。比如刚才设置的username属性,在icre.dbs.jianshu.com下同样可以访问到,用户不用重新登录就可以拿到第一次登录进来时候的用户信息,因为这些用户信息都是存在父级域".jianshu.com"下面,其他页面同yang可以拿到。
当我在icre.arse.jianshu.com这个子域名下设置: document.cookie='age=24; domain=.icre.arse.jianshu.com';这个age属性则在icre.dbs.jianshu.com下是看不到的。要解决cookie的跨域问题,即把要设置的键值对放到父级域的cookie里面即可。