淘宝如何跨域获取 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。这是因为浏览器的安全策略限制,为了防止跨站脚本攻击(Cross-Site ...
总结来说,跨域获取Cookie是通过JSONP机制实现的,主要涉及A网站提供接口读取Cookie,B网站通过Ajax请求获取并设置Cookie。这种方法简化了用户在多个关联网站之间的登录流程,但同时也需要考虑安全问题,避免用户...
### 跨域访问解决方案与Cookie处理 在现代Web开发中,跨域问题一直是困扰开发者的一大难题。当浏览器出于安全考虑阻止不同源之间的数据交互时,跨域问题便产生了。为了解决这一问题,并确保在跨域场景下可以正确地...
跨域获取Cookie是互联网应用中实现单点登录(Single Sign-On, SSO)的一种常见技术,尤其在多网站协作或拥有多个子域名的大型系统中。这里的例子展示了如何通过JavaScript和PHP实现在A网站登录后,B网站能够自动识别...
【标题】"Dubbox跨域请求、Cookie设置"所涉及的知识点主要集中在分布式服务框架Dubbo的跨域问题处理和Cookie的配置...通过分析这些文件,你可以更深入地理解如何在实际项目中配置和测试Dubbox的跨域请求及Cookie设置。
本文将深入探讨“跨域携带cookie”的案例,重点解析如何通过nginx服务器解决这一问题。首先,我们需要理解什么是跨域以及为什么会有跨域限制。 跨域是指浏览器的同源策略,即JavaScript只能访问与当前页面同协议、...
单机模拟多台主机,跨域写cookie场景
跨域获取cookie方法-附件资源
ajax跨域传递cookie.zip
在C#编程中,WebBrowser控件是一个强大的工具,它允许开发者在Windows应用程序中...通过这种方式,开发者可以轻松地在C#应用程序中实现对WebBrowser控件加载页面的cookie的读取和管理,从而支持更复杂的网页交互需求。
在A域中存放openid.aspx 在B域中调用A域的openid.aspx 调用方法: ...B域根据这个标识来确定是否更新自己域的cookie,每次更新后都需刷新页面一次,这个刷新动作已经在openid.aspx中完成,不用自己再写。
因为cookie在跨域的情况下,浏览器根本不允许互相访问的限制,为了突破这个限制,所以有了以下这个实现方案,使用postmessage和localstorage进行数据跨域共享。 原理比较简单,但是遇到的坑也不少,这里梳理一下,做...
标题中提到的“***(C#)跨域及跨域写Cookie问题”,实际上涉及到了Web开发中的一个常见问题:不同域名下的Web页面互相访问时遇到的同源策略限制。同源策略是浏览器的一种安全机制,它规定了不同域之间的交互行为,...
这样,当Iframe加载admin.php时,浏览器会接受P3P头,允许在不同域之间设置和读取Cookie,从而实现跨域登录。 至于Session,虽然它看起来与Cookie不同,但它们在很多情况下密切相关。Session通常依赖于Cookie来存储...
在互联网应用中,当用户需要从一个域名(域A)的Web页面发起一个Ajax请求到另一个不同域(域B)的服务器时,就会发生跨域请求。出于安全考虑,浏览器同源策略默认禁止这种跨域Ajax请求携带cookies,这种限制会阻止一...
然而,有些情况下我们需要在跨域请求中保持登录状态,这就涉及到如何处理跨域cookie的问题。在本篇文章中,我们将深入探讨如何基于axios库来解决这个问题。 axios是一个非常流行的JavaScript库,用于发起HTTP请求。...
jQuery使用ajax跨域获取数据