一、跨子域的情况
如a.f.com和b.f.com这两个域名指点单点登录,这种情况下可以设置cookie的domain为父域名,如此各个子域可以共享cookies,子域的系统可以读取cookies的值。在这种情况下可以把从认证服务器获取的token放在cookie中,访问每个系统时,调用认证服务器验证一下token的合法性,然后创建子域服务器的局部会话即可。
需要注意的是 domain 域名前面加一个点(.)
二、完全跨域的情况
如 a.x.com 和 b.y.com之间,验证服务器为s.com,此时cookie只对一个域名有效,我的做法是在登录时请求s.com,登录成功之后通过jsonp设置a.x.com 和b.y.com之间的cookie。设置完成之后跳转到需要访问的页面,如此在当前浏览器标签页访问a.x.com 和b.y.com时都会上传cookie即可完成单点登录的验证。
经过测试,成功实现当前标签页的单点登录,如果是另外的标签页打开,浏览器还是不会发送cookie。此解决办法的局限性是只能在当前标签页打开,另外配置较为繁琐。
网友评论