现象描述:
前端通过统一登陆的服务成功登录后,业务后端却告知用户未登录,导致前端页面反复跳转登录页面。
背景:
因为前后端分离,所以前后端项目部署在两个子域名下。
通过统一的登录服务登录成功后会在域baidu.com下种入登录凭证cookie,其key是"token"。
前端域名:xxx.baidu.com
后端域名:yyy.baidu.com
原因:
不知什么原因业务后端也会在yyy.baidu.com下种如key为"token"的cookie,并且登录态失效的时候这个cookie不会清除。所以当前端拿到最新的登录凭证并种在baidu.com域名下之后即使请求yyy.baidu.com时cookie中也会有两个"token",一个是登录服务种的,一个是业务服务种的,而业务服务种的失效了,但是又优先使用了业务服务的"token"导致一直登录不上。
解决方法:
业务服务不要记录登录态,或者发现登录态失效清除掉自己记录的登录态即可。
记录该问题的原因:
这个问题不好查的原因是前端通过开发者工具只能看到xxx.baidu.com和.baidu.com下的cookie。也没想到去看yyy.baidu.com下的cookie,所以不好定位。
最后仔细分析请求发送所带的cookie发现同一个key居然出现两次,才根据这条线索有所收获。