淘宝如何跨域获取Cookie分析

淘宝如何跨域获取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代码为:

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

看到这里之后于是也大概知道他如何处理了的,为了确认一下,于是搜索一下 KISSY.getScript 函数代码,确实采用了JS跨域的 JSONP 解决方案:

    1.  1 getScript: function(url, success, charset) {
       2             var isCSS = RE_CSS.test(url),
       3                 node = doc.createElement(isCSS ? ‘link‘ : ‘script‘),
       4                 config = success, error, timeout, timer;
       5
       6                 node.src = url;
       7                 node.async = true;
       8
       9             scriptOnload(node, function() {
      10                     if (timer) {
      11                         timer.cancel();
      12                         timer = undef;
      13                     }
      14
      15                     S.isFunction(success) && success.call(node);
      16
      17                     // remove script
      18                     if (head && node.parentNode) {
      19                         head.removeChild(node);
      20                     }
      21                 });
      22             head.insertBefore(node, head.firstChild);
      23       }   

其原理是通过动态create js include 动态加载js,然后为该script节点bind onload事件或判断onreadystatechange,其具体细节可以参考以上 scriptOnload 的函数的处理。 当js加载完成之后 采用回调方式来执行 success 函数。

为了进一步确实,于是使用 Jquery的 $.getScript 来测试一把,首先在 taobao.com下进行登录成功,然后随便在本地写了一个测试页,通过以下语句:

    1. $.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 的跨域访问。

时间: 2024-10-14 18:28:14

淘宝如何跨域获取Cookie分析的相关文章

关于http和https淘宝支付宝跨域解决方法研究

关于http和http跨域淘宝解决方案研究: http://buyer.trade.taobao.com/trade/pay.htm?spm=a1z01.2.3.4.0.wZAGp9&bizOrderId=848792014755406&bizType=200&ispayforanother=false(模拟) 这是淘宝网上的一段模拟超连接,其中spm应为淘宝用户唯一标志(经过加密) 然后经过淘宝后台与支付宝用户标志进行唯一匹配,如果匹配成功 则进行下面的支付宝付款页面(支付宝将提

ajax跨域获取cookie信息

js脚本ajax请求 news.xxx.com 请求www.xxx.com获取登录状态信息 $.ajax({             type: "GET",             url: 'http://www.xxx.com/index.php?m=member&'+Math.random(),             data: {},             dataType: "Html",             xhrFields: {  

XMLHTTPRequest对象不能跨域获取数据?!

写了一小段代码,是用XMLHTTPRequest对象来获取数据的,在本地服务器中,运行的很顺利,但是转向实际服务器(实质上就是转向http://gumball.wickedlysmart.com获取一个json文件过来),运行就跑不起来了. 这就涉及到跨域获取数据的问题了. 我运行时的环境是这样的: 本地服务器运行当前代码.转向http://gumball.wickedlysmart.com获取一个json文件过来. 结果:报错. XMLHttpRequest cannot load   No

跨域获取服务器数据方式

学习AJAX跨域获取数据碰到这个问题,特此记录. 理解跨域首先必须要了解同源策略.同源策略是浏览器上为安全性考虑实施的非常重要的安全策略. 同源是什么?URL由协议.域名.端口和路径组成,如果两个URL的协议.域名和端口相同,则表示他们同源. 为什么需要同源? 假设从一个恶意网站打开支付宝或其他重要的页面(通过window.open),如果没有同源限制,恶意网页上的javascript脚本就可以任意操作你打开的支付宝等网页,这是极其危险的. 由于同源策略的限制,XmlHttpRequest只允许

asp.net forms 表单验证 实现跨域共享cookie(即SSO,单点登录(在二级域名下))

1.前提: 需要做一个单点登录,使用asp.net自带的表单验证(FormsAuthentication) 配置文件怎么写,如下(基本的): <authentication mode="Forms"> <forms loginUrl="~/user/login" enableCrossAppRedirects="true" timeout="3600" name="qz.bbs" cook

跨域共享cookie

1. JSP中Cookie的读写 Cookie的本质是一个键值对,当浏览器访问web服务器的时候写入在客户端机器上,里面记录一些信息.Cookie还有一些附加信息,比如域名.有效时间.注释等等. 下面是一个jsp中写入读取Cookie的测试:在顶级域名中写入Cookie,在子域名中读取,目的是实现一个分布系统的单点登录. 两个jsp中读写代码如下: 写入: <% Cookie cookie = newCookie("write","cookie_write")

jquery的ajax和getJson跨域获取json数据

原文:http://www.cnblogs.com/yqskj/archive/2013/06/12/3133247.html 很多开发人员在使用jquery在前端和服务器端进行数据交互,所以很容易会认为在前端利用jquery就可以读取任何站点的数据了.近日在进行开 发时,因为要和第三方公司的一个项目进行数据的共享,因为考虑多不占用服务器的资源,遂决定直接在html进行数据的读取,不走服务器端进行中转了.然后 正好就遇到了浏览器端跨域访问的问题. 跨域的安全限制都是指浏览器端来说的,服务器端不存

利用window.name+iframe跨域获取数据详解

详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.iframe是html的一个标签,可以在网页中创建内联框架,有个src属性(指向文件地址,html.php等)可以选择内联框架的内容,可以看个例子(猛戳这里),大概了解下就行了.window.name(一般在js代码里出现)的值不是一个普通的全局变量,而是当前窗口的名字,这里要注意的是每个iframe都有包

[转载]淘宝API调用 申请 获取session key

http://www.cnblogs.com/zknu/archive/2013/06/14/3135527.html 在调用淘宝的API时,我们都会用到appkey,appsecret,appsession. 1.我们申请应用就会有appkey和appsecret了 2.正式环境下获取SessionKey 注意:web插件平台应用和web其它应用在正式环境下是同样的获取方法 1).WEB应用 回调URL:http://cnblogs.com 访问http://container.open.ta