小程序使用 <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。