淘宝如何跨域获取Cookie分析

news/2024/5/18 15:27:52 标签: cookie, Single Sign On, 单点登录

 

 淘宝如何跨域获取Cookie分析


  

最近在发现使用Taobao的时候的一个小细节,于是便萌发起了写这篇文章。

当我们在 www.taobao.com 中进行登录之后,然后直接切换到 www.tmall.com 域名下,发现www.tmall.com首页的最顶部马上显示成了”您好, andyfaces“,于是便对此处的实现机制进行分析。

首先,用户名应该是存储在cookie中的,于是在taobao.com的域名中用 firefox看到用户名确实是存储在 cookie, 而tmall.com中没有存储该cookie:

淘宝如何跨域获取Cookie分析

可以确定的是对于cookie来说肯定是不允许垮域访问的。无论是通过JS还是Server端程序来说都是如此,那么tmall.com是如何访问到taobao.com下的cookie的呢?

于是打开 tmall.com,然后使用firebug来进行调试,发现了一条这样的请求语句

淘宝如何跨域获取Cookie分析

其页面的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结果:

淘宝如何跨域获取Cookie分析

 

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

 

 

 


http://www.niftyadmin.cn/n/733493.html

相关文章

linux命令w---watch

-n:指定间隔时间 -d:将变化的部分高亮显示出来

LWN: Fedora和各种edition!

关注了就能看到更多这么棒的文章哦&#xff5e;Fedora and its editionsBy Jake EdgeDecember 8, 2020DeepL assisted translationhttps://lwn.net/Articles/839214/Fedora 一直有独立的工作站&#xff08;Workstation edition&#xff09;和服务器版本&#xff08;Server edit…

linux命令u---ulimit

ulimit -s 查看栈空间的大小 ulimit -a 查看当前环境所有限制

单点登录三个方法及原理:共享Session、基于OpenId的单点登录、基于Cookie的OpenId存储方案

单点登录三个方法及原理&#xff1a;共享Session、基于OpenId的单点登录、基于Cookie的OpenId存储方案 单点登录在现在的系统架构中广泛存在&#xff0c;他将多个子系统的认证体系打通&#xff0c;实现了一个入口多处使用&#xff0c;而在架构单点登录时&#xff0c;也会遇到一…

LWN:Linux 5.11 合并窗口第一部分!

关注了就能看到更多这么棒的文章哦&#xff5e;5.11 Merge window, part 1By Jonathan CorbetDecember 18, 2020DeepL assisted translationhttps://lwn.net/Articles/840129/在 Linus Torvalds 发布 5.10 kernel 的时候&#xff0c;他提醒说 5.11 merge window 会跟大家传统假…

LWN: 利用auxiliary bus管理具有多种功能的硬件设备!

关注了就能看到更多这么棒的文章哦&#xff5e;Managing multifunction devices with the auxiliary busDecember 17, 2020This article was contributed by Marta RybczyńskaDeepL assisted translationhttps://lwn.net/Articles/840416/设备驱动程序通常都是属于某一个内核子…

Ubuntu下KVM的安装配置

KVM教程&#xff1a; 1. KVM KVM的全称是“基于内核的虚拟机”&#xff0c;最先由Qumranet公司开发而成。2008年&#xff0c;红帽公司收购了Qumranet&#xff0c; www.2cto.com 将KVM作为服务器版红帽企业级虚拟化(RHEV)的核心部分。KVM采用了GPL许可证模式&#xff0c;是主…

linux命令t---tee

tee -a file 以累加的方式&#xff0c;将数据加入file中 last | tee last.list | cut -d " " -f1 将last的输出存一份到last.list中 ls -l /home | tee ~/homefile | more 将ls的数据存一份到~/homefile&#xff0c;同时屏幕也有输出信息 ls -l / | tee -a ~/homef…