文档章节

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

菜蚜
 菜蚜
发布于 2016/05/09 16:32
字数 940
阅读 1241
收藏 91

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

OK,下面我们来解密吧:

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

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

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

这是一个普通的200请求

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

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

这是200响应输出内容

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

这里有个特殊请求,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响应码。

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

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

200响应码很好。

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

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

OK,设置成功

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

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

总结:

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

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

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

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

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

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

© 著作权归作者所有

共有 人打赏支持
菜蚜
粉丝 28
博文 76
码字总数 36325
作品 0
杭州
程序员
加载中

评论(2)

强子1985
强子1985
不错
哎码
哎码
受益匪浅。
完全跨域单点登录解决方案[php+redis+p3p协议]

技术要点:COOKIE跨域 + SESSION共享 cookie跨域:让不同域下的session cookie有着同样的session id session共享:同一会话系统,客户端不同域下的session id相同故可访问相同的会话状态 完全...

big_cat
2015/11/11
0
0
bboss 会话共享框架 4.0.8 发布

bboss 会话共享4.0.8发布 bboss 会话共享功能特点: 作 用:为应用提供统一会话管理功能,避免集群部署场景下负载切换session丢失问题; 跨域跨应用共享会话并实现SSO功能;解决了会话共享五...

bboss
2015/08/02
3.2K
16
bboss session 共享框架 v4.0.9 发布

bboss 会话共享4.0.9发布,4.0.9增加了以下特性: 升级mongodb客户端驱动到mongo-java-driver-3.0.3 支持mongodb最新稳定版本3.0.6(终于可以使用最新的高性能、可伸缩的NoSQL数据存储引擎W...

bboss
2015/09/05
1K
16
跨二级域单点登录解决方案[php+redis]

cookie共享 + session共享 cookie共享:共享同一个session cookie,服务端接受到相同的session id session共享:共享同一个session系统,这样来自不同二级域的统一session id访问同一会话数据...

big_cat
2015/11/09
0
0
京东SSO单点登陆实现分析

京东的sso流程: 初始访问状态: cookies: http请求: 1.在首页点击登陆,跳转至passport.360buy.com,给予验证cookie alc(可以试试在提交登陆信息前删除该cookie) cookies http请求 2.填写...

bengozhong
2016/08/15
63
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx的简单使用:负载均衡

nginx:反向代理的服务器;用户发送请求到nginx,nginx把请求发送给真正的服务器,等待服务器处理完数据并返回,再把数据发送给用户。 nginx作为一个反向代理服务器,能缓存我们项目的静态文...

osliang
12分钟前
1
0
网站title标题被改并被百度网址安全中心提醒的解决办法

国庆假日期间我们Sine安全接到众多网站站长求助网站标题被改导致在百度搜索中百度安全中心提醒被拦截,导致网站正常用户无法浏览网站被跳转到一些菠菜du博网站,而且很明显的一个特征就是在百...

网站安全
14分钟前
1
0
JDK版本与major.minor version的对照关系

其实,只需要记住jdk6对于major.minor version 50即可,其他版本自行计算即可。 ---------------------

码代码的小司机
16分钟前
1
0
Gitlab安装

具体步骤如下: sudo yum install -y curl policycoreutils-python openssh-server cronie sudo lokkit -s http -s ssh sudo yum install postfix sudo service postfix start sudo chkconfi......

很好亦平凡ms
23分钟前
1
0
C++基础教程面向对象学习笔记及心得感悟[图]

C++基础教程面向对象学习笔记及心得感悟[图] 使用友元函数重载算术运算符: C ++中一些最常用的运算符是算术运算符 - 即加号运算符(+),减运算符( - ),乘法运算符(*)和除法运算符(/...

原创小博客
24分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部