近期在开发系统时,出现cookie无法写入的问题(其他项目接入无此问题),原来系统的顶级域名(一级域名)为.com 而 本系统的顶级域名为.net,显然,二者之间无法共享cookie。
===================================================================================================
但是二级域名及其子域名间是可以共享cookie的,如a.young.com 和 b.young.com 之间是可以共享的。
而登录模块正是基于此实现的(服务端写入cookie到.young.com)
下面代码以js-cookie为例来说明二级域名及其子域名间cookie的共享和相互修改:
设置cookie
-
设置domain为二级域名时,其子域名间可共享
-
设置domian为其子域名(三级为例),子域名间不可共享
// 当前处于haha-test..com域名下 Cookies.set('a', 1, { domain: 'young.com'}) // .young.com都可以看到 Cookies.set('b', 2, { domain: 'haha-test.young.com'}) // .haha-test.young.com都可看到 Cookies.set('c', 3, { domain: 'test.haha-test.young.com'}) // // .test.haha-test.young.com都可看到
执行Cookies.set('a', 1, { domain: 'young.com'})后haha-test.young.com(图一) 和 haha-test.young.com 的cookie中均可看到a的值
执行Cookies.set('b', 2, { domain: 'haha-test.young.com'}) 后 http://haha-test.young.com 中 看不到b值,
执行第三行代码时,http://haha-test.young.com 也无法看到c的值
读取cookie
同设置cookie类似:
-
三级域名能读取设置了
domain为二级域名或者自身的cookie,不能读取其他三级域名domain的cookie。例如:要想cookie在多个三级域名中共享,需要设置domain为二级域名,这样就可以在所有三级域名里面或者到这个cookie的值了。 -
二级域名只能获取到
domain设置为二级域名的cookie,domain设置为其他子级域名的无法获取。Cookies.get('a') // 1 Cookies.get('b') // 2 Cookies.get('c') // undefined
修改cookie
在js-cookie中 修改和设置都是set方法,可认为同设置cookie
- 二级域名的
cookie在二级域名或者子域名【需设置domain为二级域名】都可以修改。 - 修改三级域名自身生成的
cookie不需要设置domain,直接设置即可
删除cookie
-
二级域名的cookie在二级域名或者子域名都可以删除,但是用子域名访问的网站要删除二级域名的cookie,需要设置获取到的cookie的domain为二级域名,这样才能删除二级域名的cookie,否则无法删除,默认的会删除当前访问的域名下对应的cookie,而不是二级域名的
// 当前为haha-test.young.com cookies.remove('a', { domain: '.young.com' }) // 删除二级域名的 cookies.remove('b') // 默认删除当前访问的域名下对应的cookie,但是set时设置了domain,删除也需要,此处无法删除 cookies.remove('b', { domain: 'haha-test.young.com'})
-
注:
.com为顶级域名或者称以及域名,young.com为二级域名,test.young.com为三级域名,以此类推