taobao.com 和 tmall.com 为什么能做到登录互通

目录:

  • 登录互通
  • Cookie/Session的跨域共享
  • Cookie/Session的跨域共享的几种方法
    • 存储到服务器(数据库:mysql...、mamcache、redis)
    • 服务端同步(依赖 cookie)
    • 服务器同步
    • 总结
  • taobao.com 和 tmall.com 登录互通

登录互通

当前非常火的单点登录SSO,在多个系统的集群里,用户只需一次登陆,其他系统也会感知到用户登陆,不需要用户重新输入用户名密码登陆。

这是外行人的理解,内行人就得看看其中的黑魔法。

首先引入一个概念,Cookie/Session的跨域共享。

Cookie/Session的跨域共享

同域共享 Session

介绍跨域共享之前,先说同域共享。多个站点在同一个域名下面是可以共享 Cookie 的,这是浏览器默认为我们做的工作,浏览器会把 Cookie 和 它的域存在本地,当你跳转到同域站点会在本地读取 Cookie 并带到请求的 header 发送给服务端。


跨域共享 Session

跨域共享顾名思义就是不同域名下也能共享 Cookie,实现身份验证,淘宝跟天猫的登陆互通就是这么干的。

Cookie/Session的跨域共享的方法;

  • 存储到服务器(数据库: mongodb 、mysql...、memcache、redis):
    用户第一次登录时,服务端将 session 信息存储到服务器上。当用户跳转到另一个跨域页面时,会向服务器查看当前用户 session 的情况,如果有则直接返回实现登录状态同步。

  • 服务端同步(依赖 cookie):
    当用户跳转到另一个跨域页面B时,B服务端检查是否存在这个session,若没有就将 session 同步到 B服务端,实现 session 的同步。

  • 服务器同步:
    部署一台专门用作登录的服务器,用户首次登录会将 session 存入服务器,然后服务器将 session 同步到其他服务器上,达到 session 共享的目的。

总结:
其实单点登录的实现:用户第一次登录时,服务端将 session 信息存储到服务器上。当用户跳转到另一个跨域页面时,会向服务器查看当前用户 session 的情况,如果有则直接返回实现登录状态同步。
简单来说就相当于实现一个中转站,这个中转站存放着需要共享登录状态服务应用的 session 信息,它就相当于一把钥匙,当用户进行应用跳转的时候都会来中转站看一看,如果 session 存在就直接使用这把钥匙把通往另一个应用的门打开,如果不在就得先确认用户身份(登录)制造 session 钥匙存在中转站再把门打开,用户的身份存储和身份的有效时间都是中转站说了算,统一管理的。

实现:


SSO流程图

taobao.com 和 tmall.com 登录互通

回过头来寻找淘宝跟天猫 Seesion 共享的方法:

tmall-jsonp

cookie

我是用qq作为用户名,羞涩打码~
不难发现当我登录过之后跳转到 tmall ,tmall 通过jsonp的形式加载login_api.do?xxxxxx文件来获取用户的 Cookie 从而实现 cookie 的共享,这个文件在登录淘宝的时候就会生成。

END......我是个有底线的家伙......END

你可能感兴趣的:(taobao.com 和 tmall.com 为什么能做到登录互通)