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

目录:

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

登录互通

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

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

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

Cookie/Session的跨域共享

taobao.com 和 tmall.com 为什么能做到登录互通
介绍跨域共享之前,先说同域共享。多个站点在同一个域名下面是可以共享 Cookie 的,这是浏览器默认为我们做的工作,浏览器会把 Cookie 和 它的域存在本地,当你跳转到同域站点会在本地读取 Cookie 并带到请求的 header 发送给服务端。
taobao.com 和 tmall.com 为什么能做到登录互通
跨域共享顾名思义就是不同域名下也能共享 Cookie,实现身份验证,淘宝跟天猫的登陆互通就是这么干的。

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

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

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

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

总结:
其实单点登录的实现就相当于实现一个中转站,这个中转站存放着需要共享登录状态服务应用的 session ,当用户进行应用跳转的时候都会来中转站看一看,如果 session 存在就直接把通往另一个应用的门打开,如果不在就得先确认用户身份(登录)再把门打开,用户的身份存储和身份的有效时间都是中转站说了算,统一管理的。

taobao.com 和 tmall.com 登录互通

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

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

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