現象描述:
前端登錄成功後並沒有從後端那裏拿到登錄信息,換句話說登錄服務告訴我們登錄成功了,但是後端卻說我們沒有登錄成功。
背景:
因爲前後端分離,所以前後端項目部署在兩個子域名下。
因爲要打通登錄態,需要調用登錄服務,登錄服務會在 .baidu.com 下寫入登錄態。
前端域名:xxx.baidu.com
後端域名:yyy.baidu.com
原因:
後端拿到的登錄態和登錄服務下發的登錄態不統一。
後端也記錄了一次登錄態在 yyy.baidu.com 下。
出現這種情況一般是登錄態失效了導致的,第一次登錄的時候瀏覽器沒有任何登錄態,登錄的時候是沒問題的。登錄過一次之後登錄態失效,也就是登錄服務下發的登錄態失效了,我們要跳轉登錄服務,然後登錄服務刷新了瀏覽器 .baidu.com 下的登錄態,但是yyy.baidu.com下失效的登錄態還存在,請求接口yyy.baidu.com的時候後端接收到的是失效的登錄態,所以總是說登錄失敗。
解決方法:
後端不要記錄登錄態,或者發現登錄態失效清除掉自己記錄的登錄態即可。
記錄該問題的原因:
這個問題不好查的原因是前端通過開發者工具只能看到xxx.baidu.com和.baidu.com下的cookie。也沒想到去看yyy.baidu.com 下的cookie,所以比較謎。
最後仔細分析請求發送所帶的cookie發現同一個key居然出現兩次,才根據這條線索有所收穫。