小程序使用 <web-view></web-view> 內嵌 H5,當跳轉至 H5 后,校驗用戶的登錄狀態是最重要的。
在做手中的項目 b.xx.com 時,需要調用另一個域名下(a.xx.com)的公共地址接口,兩處都需要校驗用戶的登錄狀態。
最初的做法是:
let cookie='aaaaaa2222fghhhh', domain = '.xxx.com'; document.cookie = `sid=${cookie};domain=${domain};path=/`;
這樣寫發現在 a.xx.com 中獲取不到當前 cookie:經排查發現是因為 a.xx.com 服務器沒有開啟允許跨域訪問,開啟之后 cookie 就可以拿到了!
在后續的聯調中發現,凡是 a.xx.com 下的接口,訪問時 request header 里都會帶兩個參數名相同但是值不同的cookie,導致登錄校驗失敗的情況頻繁出現,經過接口請求分析發現是因為 a.xx.com 中服務器中設置的 domain 是 a.xx.com ,而 b.xx.com 中設置的 .xxx.com。domain不一致,導致接口的 response 里會自動帶上cookie,所以會出現兩個參數名相同的 cookie。
解決方法:將 a.xx.com 的 domain 也設置為 .xxx.com。