二级域名及其子域名间Cookie的共享

11,719 阅读2分钟

近期在开发系统时,出现cookie无法写入的问题(其他项目接入无此问题),原来系统的顶级域名(一级域名)为.com 而 本系统的顶级域名为.net,显然,二者之间无法共享cookie。

===================================================================================================

但是二级域名及其子域名间是可以共享cookie的,如a.young.comb.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,不能读取其他三级域名domaincookie。例如:要想cookie在多个三级域名中共享,需要设置domain为二级域名,这样就可以在所有三级域名里面或者到这个cookie的值了。

  • 二级域名只能获取到domain设置为二级域名的cookiedomain设置为其他子级域名的无法获取。

    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为三级域名,以此类推