淘宝、京东跨域共享会话的分析与总结

前言:你是否好奇在登陆了taobao.com,而后tmall.com也有了会话信息呢?php

OK,下面咱们来解密吧:ajax

首先,在login.taobao.com登陆淘宝帐号json

这里看不到含有tmall.com的请求api

淘宝登陆完毕后,新开tab键入tmall.com跨域

这是一个普通的200请求cookie

咱们发现,vip.tmall.com请求了屡次,响应码也不一样,刚开始是302跳转,后面是普通的200请求app

这个302跳转到https://login.taobao.com/jump下dom

这是200响应输出内容异步

跳转到login再跳转到pass.tmall.com,从路径上来看这里是设置一些会话标识jsonp

这里有个特殊请求,www.taobao.com/go/app/tmall/login-api.php

后通过验证,此请求必须携带必要的cookie(也就是taobao域名下的cookie),而且Referer必须为https://www.tmall.com(或http协议,或在尾部加/)

得出结论:这个请求是在tmall域名下经过ajax调用taobao域名的请求,获得taobao的cookie,而后渲染tmall的吊顶。

从结果来看,这里设置了不少cookie。

而后,直接刷新tmall.com

这里能够看到,vip.tmall.com直接返回200响应码。

综上作出如下猜测与总结:

一、淘宝吊顶的会话信息和真实的会话信息存储方式不一样;

前者储存在cookie中,后者储存在服务端;tmall等其余拓展域名经过ajax(www.taobao.com/go/app/tmall/login-api.php)同步taobao域名下的cookie

二、访问tmall等扩展域名,须要判断会话状态的请求先根据本域名下的cookie判断:若是相应的cookie名称不存在,那么作302跳转到https://login.taobao.com/jump下同步cookie到本域名下;若是存在,那么直接根据cookie判断服务端的会话状态,作出200响应;

三、因为除taobao域名自己外,其余域名都采用懒加载会话策略,因此taobao域名地位高于其余域名(或因为”历史缘由“)

==============================================================

下面看看京东的作法吧,就简单啦:

首先,登陆jd

200响应码很好。

又出现一个passport的请求,url不同哦,返回的jsonp信息包含sso等字样

果真被执行了,这里请求了屡次,每次都包含了不一样的域名,看起来像设置cookie操做。

OK,设置成功

可见京东的处理方式简单明了,直接在登陆完成以后把全部domain所有扫描一遍种下cookie,域名之间的关系看起来比较清晰

======================================================

总结:

淘宝和京东采用了两种不一样的策略来实现跨domain的客户端会话同步机制;

淘宝主要是懒同步,就是用户访问到指定的域名,才去作会话同步;京东则是提早将全部域名的cookie所有准备好。

淘宝的缺陷和不足:吊顶的会话信息不能直接反应真实的会话信息,而且cookie同步策略是有问题的(能够模拟出吊顶和内容的会话信息不一样)

京东的缺陷和不足:假设之后的域名增长到好几十个呢,难道仍是要一次性所有种植cookie吗?另外,异步请求不可避免会有丢失的风险

本质上,会话在服务端只保留一份,目前使用策略较多的是集中式会话管理;

会话在客户端的标识须要cookie,那么会话的同步或共享在客户端就转为cookie的同步了,而cookie因为跨域就无法直接共享了,那么跨域的cookie同步就可使用http的302跳转来实现(不论是ajax请求仍是页面跳转)。

相关文章
相关标签/搜索