`

淘宝如何跨域获取 Cookie 分析

    博客分类:
  • sso
Sao 
阅读更多
淘宝如何跨域获取 Cookie 分析
http://denger.me/2011/04/taobao-how-cross-domain-access-to-cookies/
April 13, 2011
最近在发现使用Taobao的时候的一个小细节,于是便萌发起了写这篇文章。 当我们在 www.taobao.com 中进行登录之后,然后直接切换到 www.tmall.com 域名下,发现www.tmall.com首页的最顶部马上显示成了”您好, andyfaces“,于是便对此处的实现机制进行分析。 首先,用户名应该是存储在cookie中的,于是在taobao.com的域名中用 firefox看到用户名确实是存储在 cookie, 而tmall.com中没有存储该cookie:



可以确定的是对于cookie来说肯定是不允许垮域访问的。无论是通过JS还是Server端程序来说都是如此,那么tmall.com是如何访问到taobao.com下的cookie的呢? 于是打开 tmall.com,然后使用firebug来进行调试,发现了一条这样的请求语句:



其页面的JS代码为:

KISSY.getScript("http://www.taobao.com/go/app/tmall/login-api.php?"+Math.random());
看到这里之后于是也大概知道他如何处理了的,为了确认一下,于是搜索一下 KISSY.getScript 函数代码,确实采用了JS跨域的 JSONP 解决方案:

getScript: function(url, success, charset) { 
      var isCSS = RE_CSS.test(url), 
          node = doc.createElement(isCSS ? 'link' : 'script'), 
          config = success, error, timeout, timer; 

          node.src = url; 
          node.async = true; 

      scriptOnload(node, function() { 
              if (timer) { 
                  timer.cancel(); 
                  timer = undef; 
              } 

              S.isFunction(success) && success.call(node); 

              // remove script 
              if (head && node.parentNode) { 
                  head.removeChild(node); 
              } 
          }); 
      head.insertBefore(node, head.firstChild); 

其原理是通过动态create js include 动态加载js,然后为该script节点bind onload事件或判断onreadystatechange,其具体细节可以参考以上 scriptOnload 的函数的处理。 当js加载完成之后 采用回调方式来执行 success 函数。 为了进一步确实,于是使用 Jquery的 $.getScript 来测试一把,首先在 taobao.com下进行登录成功,然后随便在本地写了一个测试页,通过以下语句:

$.getScript('http://www.taobao.com/go/app/tmall/login-api.php?0.6783450077710154', function(){ 
    console.log("the taobao.com cookie object:" + userCookie + " username:" + userCookie._nk_); 
}); 


其实大致原理如此,通过在www.taobao.com 的server端提供一个获取当前域下所有cookie的 php的请求地址,然后该php获取到cookie之后将期并成 js 代码,也就是以上第二个截图所看到的。然后再在 tmall 采用 jsonp 的方式跨域加载该 js 代码,从而实现 cookie 的跨域访问。
分享到:
评论

相关推荐

    axios中cookie跨域及相关配置示例详解

    本文将详细讲解如何在Axios中配置Cookie跨域以及相关的后端设置。 首先,我们要明确一点:默认情况下,Axios在发起跨域请求时并不会携带Cookie。这是因为浏览器的安全策略限制,为了防止跨站脚本攻击(Cross-Site ...

    跨域获取cookie,多个网站实现一键登录.docx

    总结来说,跨域获取Cookie是通过JSONP机制实现的,主要涉及A网站提供接口读取Cookie,B网站通过Ajax请求获取并设置Cookie。这种方法简化了用户在多个关联网站之间的登录流程,但同时也需要考虑安全问题,避免用户...

    跨域访问解决方案,关于跨域访问cookie的资料

    ### 跨域访问解决方案与Cookie处理 在现代Web开发中,跨域问题一直是困扰开发者的一大难题。当浏览器出于安全考虑阻止不同源之间的数据交互时,跨域问题便产生了。为了解决这一问题,并确保在跨域场景下可以正确地...

    跨域获取cookie,多个网站实现一键登录.pdf

    跨域获取Cookie是互联网应用中实现单点登录(Single Sign-On, SSO)的一种常见技术,尤其在多网站协作或拥有多个子域名的大型系统中。这里的例子展示了如何通过JavaScript和PHP实现在A网站登录后,B网站能够自动识别...

    Dubbox跨域请求、Cookie设置

    【标题】"Dubbox跨域请求、Cookie设置"所涉及的知识点主要集中在分布式服务框架Dubbo的跨域问题处理和Cookie的配置...通过分析这些文件,你可以更深入地理解如何在实际项目中配置和测试Dubbox的跨域请求及Cookie设置。

    跨域携带cookie案例.rar

    本文将深入探讨“跨域携带cookie”的案例,重点解析如何通过nginx服务器解决这一问题。首先,我们需要理解什么是跨域以及为什么会有跨域限制。 跨域是指浏览器的同源策略,即JavaScript只能访问与当前页面同协议、...

    SSO跨域读写cookie

    单机模拟多台主机,跨域写cookie场景

    跨域获取cookie方法-附件资源

    跨域获取cookie方法-附件资源

    ajax跨域传递cookie.zip

    ajax跨域传递cookie.zip

    C#基于WebBrowser获取cookie的实现方法

    在C#编程中,WebBrowser控件是一个强大的工具,它允许开发者在Windows应用程序中...通过这种方式,开发者可以轻松地在C#应用程序中实现对WebBrowser控件加载页面的cookie的读取和管理,从而支持更复杂的网页交互需求。

    用script跳转方式主动跨域获取cookie或session(并非网上铺天盖地的主动设置法)

    在A域中存放openid.aspx 在B域中调用A域的openid.aspx 调用方法: ...B域根据这个标识来确定是否更新自己域的cookie,每次更新后都需刷新页面一次,这个刷新动作已经在openid.aspx中完成,不用自己再写。

    如何使用localstorage代替cookie实现跨域共享数据问题

    因为cookie在跨域的情况下,浏览器根本不允许互相访问的限制,为了突破这个限制,所以有了以下这个实现方案,使用postmessage和localstorage进行数据跨域共享。 原理比较简单,但是遇到的坑也不少,这里梳理一下,做...

    asp.net(C#)跨域及跨域写Cookie问题

    标题中提到的“***(C#)跨域及跨域写Cookie问题”,实际上涉及到了Web开发中的一个常见问题:不同域名下的Web页面互相访问时遇到的同源策略限制。同源策略是浏览器的一种安全机制,它规定了不同域之间的交互行为,...

    关于Iframe如何跨域访问Cookie和Session的解决方法

    这样,当Iframe加载admin.php时,浏览器会接受P3P头,允许在不同域之间设置和读取Cookie,从而实现跨域登录。 至于Session,虽然它看起来与Cookie不同,但它们在很多情况下密切相关。Session通常依赖于Cookie来存储...

    Ajax跨域请求COOKIE无法带上的完美解决办法

    在互联网应用中,当用户需要从一个域名(域A)的Web页面发起一个Ajax请求到另一个不同域(域B)的服务器时,就会发生跨域请求。出于安全考虑,浏览器同源策略默认禁止这种跨域Ajax请求携带cookies,这种限制会阻止一...

    基于axios 解决跨域cookie丢失的问题

    然而,有些情况下我们需要在跨域请求中保持登录状态,这就涉及到如何处理跨域cookie的问题。在本篇文章中,我们将深入探讨如何基于axios库来解决这个问题。 axios是一个非常流行的JavaScript库,用于发起HTTP请求。...

    jQuery使用ajax跨域获取数据

    jQuery使用ajax跨域获取数据

Global site tag (gtag.js) - Google Analytics