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

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

看到这里之后于是也大概知道他如何处理了的,为了确认一下,于是搜索一下 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_); 
});

Firbug结果:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267531.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js原型和原型链

我们要理解js的原型&#xff0c;首先需要知道5条js原型规则&#xff1a; 1.js引用类型(function ,array ,object)都可以任意扩展自己的属性。 1 function fn(){2 3 }4 fn.age10;5 console.log(fn.age);//106 7 var arr[1,2,3];8 arr.namekeke;9 console.log(arr);//[1,2,3,name…

蜡笔小新里的钢达姆机器人怎么画_写字机器人好用吗? 组装就花了5个小时 还要学习软件、录入字体...

据江苏公共新闻频道《新闻360》报道&#xff1a;新学期开学&#xff0c;各种各样的课后作业成了孩子和家长关注的话题。前不久&#xff0c;一条“孩子购买代写作业机器人&#xff0c;被家长发现”的新闻&#xff0c;引发了强烈争议。这种可以写字的机器人到底是什么&#xff1f…

20165235 Java第一周学习总结

(# 20165235 Java第一周学习总结 Ubuntu下git的安装与使用首先Ubuntu下git的安装&#xff0c;使用sudo apt-get install git下载Ubuntu,下载完成后可以用指令git查看。 安装完git之后输入git config --global user.name "名字"&#xff0c;git config --global user.…

解决opencv在pycharm中无代码自动提示的bug

2018-03-0422:19:39 首先&#xff0c;估计这不是bug 可能是我自己误操作导致的&#xff0c;但是让我搞了好久才搞定&#xff0c;实在是苦恼 如图已实现功能&#xff0c;百度里有很多朋友出现了&#xff0c;这个无代码提示的问题 大概是这样的&#xff0c;毕竟&#xff0c;软件这…

看风水用什么罗盘最好_兰花用什么花盆栽植最好?

兰花用什么花盆栽植最好&#xff1f;高低深浅如何选&#xff1f;文&#xff1a;花木君经常有兰友咨询关于兰花的花盆的问题&#xff0c;诸如用浅盆还是深盆&#xff0c;用什么材质的花盆适宜之类&#xff0c;由于品种不同&#xff0c;兰丛大小各异&#xff0c;如果泛泛的回答&a…

发布到服务器接口404_接口测试怎么做?

上一期咱们讲到如何使用咱们的龙测工具实现黑盒测试这不&#xff0c;接口也来啦实验步骤抢先看1&#xff0e;首先确定接口的结构&#xff0c;以龙测登录为例请求方式&#xff1a;POSTURL&#xff1a;https://prod.dragontesting.com/api/login请求体&#xff1a;包含两个必填参…

docker ubuntu 文件同步_Docker 的数据管理--Docker从入门到精通摘记

Docker 数据管理用户在使用 Docker 的过程中&#xff0c;‍‍往往需要能够查看容器内应用产生的数据&#xff0c;‍‍或者说‍‍需要把容器内的数据进行备份&#xff0c;‍‍再或者说‍‍多个容器之间需要进行数据的共享&#xff0c;‍‍那么这些就必然涉及到容器的数据管理操作…

杂项:UN-APP

ylbtech-杂项&#xff1a;APP1.返回顶部 2.返回顶部3.返回顶部4.返回顶部5.返回顶部 6.返回顶部7.返回顶部8.返回顶部9.返回顶部 10.返回顶部11.返回顶部12.返回顶部13.返回顶部14.返回顶部15.返回顶部 1、https://baike.baidu.com/item/%E6%89%8B%E6%9C%BA%E8%BD%AF%E4%BB%B62…

ubuntu上网慢的问题

2019独角兽企业重金招聘Python工程师标准>>> 测试用的是ubuntu11.10&#xff0c;教育网宽带&#xff0c;静态IP&#xff0c;无路由 如果用的是路由的应该不会很慢吧&#xff0c;路由自带DNS缓存功能的,本地DNS缓存就没有必要了 建立本地DNS缓存: (1) 安装DNS缓存软件…

c include 多层目录_Rsync 秒杀一切备份工具,你能手动屏蔽某些目录吗?

转自&#xff1a;高效运维引言Rsync 是一种快速且通用的命令行实用程序&#xff0c;可通过远程shell在两个位置之间同步文件和文件夹。使用 Rsync&#xff0c;可以镜像数据&#xff0c;创建增量备份&#xff0c;并在系统之间复制文件。复制数据时&#xff0c;你可能要根据文件名…

Lucene学习笔记(1)

Lucene学习笔记可以搜索文本文件&#xff0c;理论上可以搜索任何类型的数据。只要先把数据转化为文本&#xff0c;就可以对数据进行索引和搜索。使用了反向索引的机制&#xff0c;维护一个词/短语的表&#xff0c;对于每个词和短语都有一个链表描述有哪些文档包含这个词和短语。…

android 录音原始文件_5分钟短文 | Android证书生成,签名,验证,虽然难,但学一次就够了!...

引言从Android演进开始&#xff0c;APK签名就已经成为Android的一部分&#xff0c;并且android要求所有Apks都必须先签名&#xff0c;然后才能将其安装在设备上。关于如何生成密钥以及如何签名的文章很多。一个Apk&#xff0c;但我们将从安全角度进行研究。在对Apk文件进行反编…

WCF跨域 这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP...

尝试向 URI“http://localhost:8001/AccountService.svc”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略&#xff0c;或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系&#xff0c;以发布跨域策略文件并确保该文件允许发送 SOAP 相关的…

go语言api源码中文版_Go语言学习——sync.map源码剖析

1.简介 最近看了下Sync包&#xff0c;详读了sync.map源码&#xff0c;感觉源码实现还是比较巧妙的&#xff0c;有不少可以学习的地方&#xff1b;在讲源码前&#xff0c;先看下sync.map的"历史"&#xff0c;从网上搜资料&#xff0c;sync.map是Go语言在1.9版本才引入…

怎么成为日上会员直邮_18个日上直邮问题汇总,可以参考一下哦

前段时间发的日上直邮的微头条和视频&#xff0c;很多朋友遇到一些不明白的地方&#xff0c;我把问题汇总了一下&#xff0c;统一回答一下哦其实因为疫情&#xff0c;很多免税店都在做活动&#xff0c;活动方式不太一样&#xff0c;有好多种&#xff0c;我跟大家分享的只是其中…

python中sort返回值_Python函数你真的都学会了吗?来看看这篇Python高阶函数!

二、高阶函数高级函数, 英文叫 Higher-order Function.那么什么是高阶函数呢?在说明什么是高阶函数之前, 我们需要对函数再做进一步的理解!2.1 函数的本质函数的本质是什么&#xff1f;函数和函数名到底是一种什么关系&#xff1f;在python中&#xff0c;一切皆对象&#xff0…

基于数据库的事务消息解决分布式事务方案

转载请注明出处&#xff1a;http://www.cnblogs.com/lizo/p/8516502.html 概述 当单库已不能支撑当前业务的时候&#xff0c;我们往往都考虑进行分库&#xff08;横向拆分或者纵向拆分&#xff09;。但分库有个无法回避的问题&#xff0c;就是事务问题。网上有很多分布式事务解…

中service层的作用_浅析Java中dto、dao、service、controller的四层结构

目前我所在的项目组采用的是SpringBoot框架&#xff0c;前端使用BootStrapjQuery。SpringBoot是BS开发框架之一&#xff0c;不用单独开启tomcat服务器&#xff0c;目前比较流行&#xff0c;一般开发大型项目时会将所有的功能细分为许多小模块&#xff0c;每个模块都有dto、dao、…

【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!...

Himi 原创&#xff0c; 欢迎转载&#xff0c;转载请在明显处注明&#xff01; 谢谢。 原文地址&#xff1a;http://blog.csdn.net/xiaominghimi/article/details/6937097 终于在11月公司的游戏即将上线了&#xff0c;那么对于iOS游戏来说当今都是内置道具收费属于主流&#xf…

不越狱换壁纸_终于来了!iOS 14.3 正式版,可自动定时换壁纸

嘿嘿&#xff0c;我没有猜错吧&#xff01;iOS 14.3 正式版会在12月15日凌晨时段发布&#xff0c;在前几天我就有提到&#xff0c;这一天会发布&#xff0c;主要是与新品 AirPods Max 发售时间与iOS 14.3正式版发布时间一致。其次这次发布iOS 14.3正式版更新内容与 iOS 14.3 RC…