`
异步获取爱
  • 浏览: 80283 次
  • 性别: Icon_minigender_1
  • 来自: 大男子主义世界
社区版块
存档分类
最新评论

跨域(淘宝如何跨域获取Cookie分析)

阅读更多
最近在发现使用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代码为:

Js代码 
<script>
        KISSY.getScript("http://www.taobao.com/go/app/tmall/login-api.php?"+Math.random())
        </script>



     看到这里之后于是也大概知道他如何处理了的,为了确认一下,于是搜索一下 KISSY.getScript 函数代码,确实采用了JS跨域的 JSONP 解决方案:
    
Js代码 
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下进行登录成功,然后随便在本地写了一个测试页,通过以下语句:

Js代码 
$.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_);
});



Firbug结果:
    

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

相关推荐

    Dubbox跨域请求、Cookie设置

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

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

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

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

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

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

    同时,通过WebBrowser控件,开发者还可以与网页进行交互,例如获取cookie信息。本文将深入探讨如何在C#中基于WebBrowser控件实现获取cookie的详细步骤。 首先,为了打开指定URL并加载网页,我们需要监听WebBrowser...

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

    跨域获取Cookie是一种技术手段,常用于实现多个网站间的单点登录(Single Sign-On, SSO)。在这种场景下,用户在A网站登录后,无需在B网站再次输入用户名和密码,可以直接访问B网站并保持登录状态。这个过程涉及到...

    Vue axios 跨域请求无法带上cookie的解决

    然而,当进行跨域请求时,有时会遇到一个问题,即浏览器不会自动携带cookie。这种情况在使用Vue axios时尤为常见,尤其是在开发和部署环境之间切换时,可能会发现本地开发时cookie能够正常传递,但一旦将应用部署到...

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

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

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

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

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

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

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

    解决方法是: 代码如下: //www.B.com里的被调用的页面需要写P3P头,从而解除IE对写Cookie的阻止 context.Response.AddHeader(“P3P”, “CP=CAO PSA OUR”); //www.A.com里通过ajax调用www.B.com里的内容时,是跨域...

    ajax跨域获取数据

    - 客户端:发起Ajax请求时,设置XMLHttpRequest对象的withCredentials属性为true,表示需要携带cookie进行跨域请求。 - 服务器端:在返回的HTTP响应头中添加Access-Control-Allow-Origin、Access-Control-Allow-...

    基于C#后台调用跨域MVC服务及带Cookie验证的实现

    本文将重点介绍通过C#后台服务作为代理,处理跨域MVC服务调用并携带Cookie验证的实现。 【C#后台服务代理】 一种常见的解决方案是创建一个C#后台服务,该服务作为一个代理,接收前端的请求,然后转发到目标MVC服务...

    基于Cookie的Session跨域.zip

    本项目"基于Cookie的Session跨域"则关注如何在分布式环境中解决Session的共享问题,通过Spring和Spring MVC框架来实现这一目标。 首先,我们来了解一下Cookie和Session的基本概念。Cookie是由服务器端发送到客户端...

    跨域携带cookie案例.rar

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

    iframe 跨域访问session

    1. **P3P(Platform for Privacy Preferences)**:这是一种由W3C提出的隐私偏好平台标准,允许跨域`cookie`的设置。通过在响应头中添加`P3P`政策,服务器告诉浏览器它尊重用户的隐私。但这并不总是有效,因为并非...

    cookie跨域代码

    cookie跨域后端代码,主要解决跨域的问题,在servlet部分,供初学者使用

    cookie 跨域

    标题中的“Cookie跨域”指的是在互联网应用中,由于浏览器的同源策略限制,通常情况下,Cookie只能由创建它的源(即域名)读取。但有时候开发者需要在不同域名之间共享用户状态或会话信息,这时就需要实现Cookie的...

    session、cookie的跨域共享

    该文件可以通过代码实例,让你清楚的理解session和cookie的意思,当你明白了这点,你就可以设计出来单点登录功能,同一账号在同一时间只能登录一次功能。同时你可以通过ie、firefox去测试你对session、cookie的理解...

Global site tag (gtag.js) - Google Analytics