最近在发现使用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.iteye.com/topic/1000776
相关推荐
项目详解地址:http://www.code4app.com/blog-843201-350.html 快速集成RTMP的视频推流教程:http://www.code4app.com/blog-843201-315.html ffmpeg常用命令操作:...
microsoft/webview2: https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/ 高德地图 Uri Api: https://lbs.amap.com/api/uri-api 百度坐标拾取系统: https://api.map.baidu.com/lbsapi/getpoint/ ...
百度官方pcs api文档:http://developer.baidu.com/wiki/index.php?title=docs/pcs/overview,上面有各种语言的SDK,我用的laravel5,直接导里面的php SDK还用不了,稍做了修改才能用的。 看完上面两篇文章,基本就...
下载 sdk:http://developer.android.com/sdk/index.html 选择 linux 64 位版本 adt-bundle-linux-x86_64-20130729/sdk/platform-tools/adb 2、 安装 adb $ mkdir -p ~/bin $cp adt-bundle-linux-x86_64-20130729/sdk...
http://developer.novell.com/wiki/index.php/Libraries_for_C_(LibC) for authldap LDAP libs (2004/02/18 or later), available at: http://developer.novell.com/wiki/index.php/LDAP_Libraries_for_C you should...
Xcode的真机调试功能依赖于Apple的Developer ID,开发者需要在Apple Developer Portal上注册并加入相应的开发者计划,获取证书和配置文件,才能将应用安装到真机设备上进行调试。这些证书和配置文件管理在Xcode的...
IOS真机调试包 解压后放在目录:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
这是编译原理课程写的一个PL0的编译器,实现了词法分析、语法...愿意支持一下的可用积分下载,白嫖移步开源地址https://gitee.com/wlanxww/run_PL0_CPP。压缩包删除了clion的文件,开源地址理论上可以直接用(macOS)
描述文件 只能下载 iOS 13.1 的beta版 需要13.0 的话 需要自己先升级mac 系统到10.15的beta版 再去这个地址下载手机相应的固件 https://developer.apple.com/download/#ios-restore-images-iphone-new 通过ituns ...
- [iPhone SDK 2.2.1](http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_for_iphone_os_2.2.1__9m2621a__final/iphone_sdk_for_iphone_os_2.2.19m2621afinal.dmg) ### 二、iPhone SDK ...
然后根据推荐的驱动版本,前往<https://developer.nvidia.com/cuda-toolkit-release-notes> 查找对应的CUDA版本。下载CUDA安装包并按照官方指南进行安装。 安装CUDA后,需要下载与CUDA版本匹配的cuDNN。cuDNN是...
官网下载太慢,没有办法,分享一下! 【Windows 11】CUDA 12.6.1 及其配套的 cuDNN 8.9.7.29 【均来自英伟达官网】 链接:...cuDNN下载地址:https://developer.nvidia.com/rdp/cudnn-archive
安卓开发者网站https://developer.android.com/官网下载 国内好像不能直接访问,真是不懂这个网站为什么会被墙
- [Room](https://developer.android.com/topic/libraries/architecture/room) - [Lifecycle-aware components](https://developer.android.com/topic/libraries/architecture/lifecycle) - [ViewModels]...
Xcode下载地址大全,Xcode 各个历史版本下载地址,如本页面未收录,请在官方下载:https://developer.apple.com/downloads/index.action。
webView2运行时环境 离线环境 官网:https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/?ch=1&form=MA13LH 一份是常青版本,可以支持自动更新到最新版 一份是固定版本,适合和软件包一起
打开网址 http://developer.baidu.com/map/index.php 点击 创建应用,跟流程创建应用app 3.点击相关下载->一键下载 4.调用百度地图的APP 需要在 AndroidManifest.xml 添加 android:name="baidumapsdk.demo....
* https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial * http://mdn.github.io/webgl-examples/tutorial/sample1/ * http://mdn.github.io/webgl-examples/tutorial/sample2/ * ...
选择了阿里云视觉智能开放平台(https://vision.aliyun.com/)、百度AI开放平台...//cloud.tencent.com/)、讯飞开放平台(https://www.xfyun.cn/)、华为云(https://developer.huaweicloud.com/)等主流的国内AI平台
参考资料: http://developer.android.com/reference/android/widget/SlidingDrawer.html 现在官方建议不再使用 第二种是DrawerLayout: 这种效果是左边的侧滑栏盖在右边。 参考资料: ...