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

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

OK,下面我们来解密吧:

首先,在login.taobao.com登录淘宝账号

164033_TVrQ_576855.jpg

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

淘宝登录完毕后,新开tab键入tmall.com

154151_jcAb_576855.jpg

这是一个普通的200请求

154151_kvzc_576855.jpg

我们发现,vip.tmall.com请求了多次,响应码也不同,刚开始是302跳转,后面是普通的200请求

154151_InFO_576855.jpg

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

154153_cQC1_576855.jpg

这是200响应输出内容

154154_tvB2_576855.jpg

155533_rcau_576855.jpg

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

154156_8p1V_576855.jpg

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

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

154158_dnsB_576855.jpg

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

154200_0RBb_576855.jpg

从结果来看,这里设置了很多cookie。

然后,直接刷新tmall.com

160037_IB1Q_576855.jpg

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

综上做出以下猜想与总结:

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

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

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

3、由于除taobao域名本身外,其他域名都采用懒加载会话策略,所以taobao域名地位高于其他域名(或由于”历史原因“)

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

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

首先,登录jd

161716_RG3P_576855.jpg

200响应码很好。

161716_Bk0h_576855.jpg

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

161717_FPJ6_576855.jpg

果然被执行了,这里请求了多次,每次都包含了不同的域名,看起来像设置cookie操作。

161717_Wfww_576855.jpg

OK,设置成功

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

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

总结:

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

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

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

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

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

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

转载于:https://my.oschina.net/wnjustdoit/blog/672298

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值