最近在发现使用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设置"所涉及的知识点主要集中在分布式服务框架Dubbo的跨域问题处理和Cookie的配置...通过分析这些文件,你可以更深入地理解如何在实际项目中配置和测试Dubbox的跨域请求及Cookie设置。
本文将详细讲解如何在Axios中配置Cookie跨域以及相关的后端设置。 首先,我们要明确一点:默认情况下,Axios在发起跨域请求时并不会携带Cookie。这是因为浏览器的安全策略限制,为了防止跨站脚本攻击(Cross-Site ...
### 跨域访问解决方案与Cookie处理 在现代Web开发中,跨域问题一直是困扰开发者的一大难题。当浏览器出于安全考虑阻止不同源之间的数据交互时,跨域问题便产生了。为了解决这一问题,并确保在跨域场景下可以正确地...
同时,通过WebBrowser控件,开发者还可以与网页进行交互,例如获取cookie信息。本文将深入探讨如何在C#中基于WebBrowser控件实现获取cookie的详细步骤。 首先,为了打开指定URL并加载网页,我们需要监听WebBrowser...
跨域获取Cookie是一种技术手段,常用于实现多个网站间的单点登录(Single Sign-On, SSO)。在这种场景下,用户在A网站登录后,无需在B网站再次输入用户名和密码,可以直接访问B网站并保持登录状态。这个过程涉及到...
然而,当进行跨域请求时,有时会遇到一个问题,即浏览器不会自动携带cookie。这种情况在使用Vue axios时尤为常见,尤其是在开发和部署环境之间切换时,可能会发现本地开发时cookie能够正常传递,但一旦将应用部署到...
跨域获取cookie方法-附件资源
因为cookie在跨域的情况下,浏览器根本不允许互相访问的限制,为了突破这个限制,所以有了以下这个实现方案,使用postmessage和localstorage进行数据跨域共享。 原理比较简单,但是遇到的坑也不少,这里梳理一下,做...
跨域获取Cookie是互联网应用中实现单点登录(Single Sign-On, SSO)的一种常见技术,尤其在多网站协作或拥有多个子域名的大型系统中。这里的例子展示了如何通过JavaScript和PHP实现在A网站登录后,B网站能够自动识别...
解决方法是: 代码如下: //www.B.com里的被调用的页面需要写P3P头,从而解除IE对写Cookie的阻止 context.Response.AddHeader(“P3P”, “CP=CAO PSA OUR”); //www.A.com里通过ajax调用www.B.com里的内容时,是跨域...
- 客户端:发起Ajax请求时,设置XMLHttpRequest对象的withCredentials属性为true,表示需要携带cookie进行跨域请求。 - 服务器端:在返回的HTTP响应头中添加Access-Control-Allow-Origin、Access-Control-Allow-...
本文将重点介绍通过C#后台服务作为代理,处理跨域MVC服务调用并携带Cookie验证的实现。 【C#后台服务代理】 一种常见的解决方案是创建一个C#后台服务,该服务作为一个代理,接收前端的请求,然后转发到目标MVC服务...
本项目"基于Cookie的Session跨域"则关注如何在分布式环境中解决Session的共享问题,通过Spring和Spring MVC框架来实现这一目标。 首先,我们来了解一下Cookie和Session的基本概念。Cookie是由服务器端发送到客户端...
本文将深入探讨“跨域携带cookie”的案例,重点解析如何通过nginx服务器解决这一问题。首先,我们需要理解什么是跨域以及为什么会有跨域限制。 跨域是指浏览器的同源策略,即JavaScript只能访问与当前页面同协议、...
1. **P3P(Platform for Privacy Preferences)**:这是一种由W3C提出的隐私偏好平台标准,允许跨域`cookie`的设置。通过在响应头中添加`P3P`政策,服务器告诉浏览器它尊重用户的隐私。但这并不总是有效,因为并非...
cookie跨域后端代码,主要解决跨域的问题,在servlet部分,供初学者使用
标题中的“Cookie跨域”指的是在互联网应用中,由于浏览器的同源策略限制,通常情况下,Cookie只能由创建它的源(即域名)读取。但有时候开发者需要在不同域名之间共享用户状态或会话信息,这时就需要实现Cookie的...
该文件可以通过代码实例,让你清楚的理解session和cookie的意思,当你明白了这点,你就可以设计出来单点登录功能,同一账号在同一时间只能登录一次功能。同时你可以通过ie、firefox去测试你对session、cookie的理解...