采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
你好,方案中需要做好几个事情:
可以依赖cookie存储登录标示的id,但是不要依赖cookie去传输sessionid,应该将id从cookie中取出后作为http的request或header的参数传给服务端验证
服务端在不同的系统之间需要共享会话存储,对应的sessionid可以放在集中式的redis中统一管理存取
然后sso需要考虑不同的sso系统之间的domain域名是否一致,比如一个是a.baidu.com,另一个是b.baidu.com因为domain都是baidu.com,自然就可以做到两个子域名间的cookie可以共享了,但若是在不同的domain域名下,比如a.baidu.com,b.sina.com需要sso则需要在用户访问a.baidu.com时发现没有登录态则跳转单点登录授权站login.com,登录授权后生成对应的code和cookie,cookie用于植入客户端浏览器标示login.com这个站点用户已经登录,code用户让客户端重定向到a.baidu.com的一个特定的sso地址上,然后在a.baidu.com对应的地址收到这个客户端转发过来的code后需要通过后端服务向login.com的域名发起对应的code验证,验证成功则生成一个属于a.baidu.com的cookie给客户端,这样客户端就算登录了a.baidu.com,同样的,党用户跳转b.sina.com的时候首先对应站点判断没有登录则跳转login.com,由于之前login.com的cookie已经植入标示登录过了,则直接返回对应的code给客户端重定向到b.sina.com,同样的道理b.sina.com通过code向login.com发起验证,通过后生成自己的cookie
谢谢老师,那如果我要做排他登录,一个帐号同一时间只能登录一次,当第二次登录会把第一次登录给挤下去,这样需要怎么考虑呢
如果是共享缓存的比较好操作 若发现同一个用户id已经登陆了 则需要清掉对应的sessionid 非共享的又不在一个domain下的除非不同domain每次都过来验证 否则做不了 但每次验证又会有性能问题 因此不同domain的一般不会做排他登陆
已回复
登录后可查看更多问答,登录/注册
理解高流量电商网站性能构建思路 用高逼格技术解决性能提升问题
2.1k 11
1.7k 10
2.1k 9
1.6k 9
1.5k 8
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号