如何实现跨域cookie共享

摘要:
通过多域cookie写入和imageag,在其他域中种植与当前域相同的cookie。3.比较了几种方案的优缺点。中间域名不需要前端修改。它仅适用于具有相同辅助域名的跨域共享。
一、 背景

       为什么需要实现跨域共享cookie, 比如追踪用户的身份,根据特定用户进行推送或推荐。

二、 Cookie共享的几种方案
  • 通过中间域名,比如a.example.com 和 b.example.com 可通过cookie.example.com 或 *.example.com 来实现cookie共享;
  • 通过CORS (cross origin resource sharing)跨域读取cookie, 参考。 

              如何实现跨域cookie共享第1张

  • 通过多域写cookie, image tag 方式,在其他域内种植上和当前域相同的cookie

         

                如何实现跨域cookie共享第2张

                 

三、 几种方案对比
方案优点缺点
中间域名无需前端改造仅适用于二级域名相同的跨域共享。对已经存在的项目如严格依赖当前域名,不能有多次跳转比如a->b->a 是不合适的
CORS 读少量的前端适配CORS读取后,当前页需要一次自刷新来重新发送cookie
image tag 写后端无感知

前端适配及网络IO (需要从其他域获取cookie信息),页面会有顿挫感,

对写cookie的时机有要求

四、 CORS方式读取cookie code snippet
 1     function addCrossCookie() {
 2         var getCookie = "http://your.cross.domain/get_cookie";
 3         $.ajax({
 4                    type: "get",
 5                    url: getCookie,
 6                    dataType: "text",
 7                    mode: "cors",
 8                    crossDomain: true,
 9                    xhrFields: {
10                        withCredentials: true
11                    },
12                    success: function(output) {
13                    /*
14                     * if cookie existed under `your.cross.domain`, you can answer it back by `output`.
15                     * then document.cookie set it to `current.domain`
16                     * window.location.reload to trigger a browser tab refresh to take the cross cookie to your backend.
17                     */
18                        document.cookie = output;
19                        setTimeout(function() {
20                            window.location.reload();
21                        }, 0);
22                    },
23                    error: function(output) {
24                        console.log(output);
25                    }
26                });
27     }

免责声明:文章转载自《如何实现跨域cookie共享》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python参考资料大全JAVA8——多重排序下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SpringBoot实现JWT认证

SpringBoot实现JWT认证 本文会从Token、JWT、JWT的实现、JWTUtil封装到SpringBoot中使用JWT,如果有一定的基础,可以跳过前面的内容~ Token 简介 Token 是一个临时、唯一、保证不重复的令牌,例如智能门锁,它可以生成一个临时密码,具有一定时间内的有效期。 实现思路 UUID具有上述的特性,所以我们可以使用UUI...

javascript 设置cookie(转)

原文地址:http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/06/13/1757658.html 设置cookie每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie:document.cookie="userId=828";如果要一次存储多个名/值对,可以...

服务端跨域处理 Cors

1 添加System.Web.Cors,System.Web.Http.Cors 2 global文件中 注册asp.net 管道事件 protected void Application_BeginRequest(objectsender, EventArgs e) { var response...

缓冲区溢出保护机制——Windows

缓冲区溢出保护机制 Windows GS安全编译选项 Visual Studio 2003及以后版本的Visual Studio中默认启用了这个安全编译选项。 GS编译选项为每个函数增加了一些额外的数据和操作: 1、在所有函数调用发生时,向栈帧内压入一个额外的随机DWORD,这个随机数被称作“canary”,用IDA反汇编时,又被称作“Security C...

session 详细解析(转)

  转自  https://www.cnblogs.com/blueskycc/p/5524709.html?tdsourcetag=s_pcqq_aiomsg http协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议。所谓无状态,指的是不会维护http请求数据,http请求是独立的,非持久的。而越来越复杂的WEB应用,需要保存一些用...

如何调整cookie的生命周期

一、什么是cookie 形象比喻成“网络身份证” 指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。 (1)记录信息的盒子(2)识别每一个网络用户的证件 (3)12个月的存活期(4)每当用户访问了一个带有AdMaster代码的页面,cookie就会自动更新浏览信息 二、使用和禁用cookie 可以在浏览器的设置...