uni-app中H5页面获取Cookie的值不正确
uni-app中H5页面获取Cookie的值不正确
| 产品分类 | 版本号 | 手机系统 | 手机系统版本号 | 手机厂商 | 手机机型 | 打包方式 |
|---|---|---|---|---|---|---|
| HTML5+ | 3.1.15 | iOS | IOS 14 | 苹果 | iPhone6sp | 云端 |
## 示例代码:
```javascript
mui.plusReady(function() {
var self = plus.webview.currentWebview();
var type = self.type;
var studentids = self.studentids;
var contractid = (self.contractid || '');
var orderid = (self.orderid || '');
var pageid = (self.pageid || '');
var ordernum = (self.ordernum || 1);
var notchInScreen = window.localStorage.getItem('notchInScreen');
var authmark = window.localStorage.getItem('user_authmark');
var userid = window.localStorage.getItem('userids');
var username = window.localStorage.getItem('name_top');
var cookieObj = {
loginuserid: userid,
loginusername: username,
onlinecontractshow: '0',
system: 'EAS',
nounce: getUuid()
};
mui.toast(username);
var path = '';
if(type == 'deposit'){
path = commUrlWeb+'/#/deposit?notchInScreen='+notchInScreen+'&studentids='+studentids+'&authmark='+authmark;
} else if(type == 'course'){
path = commUrlWeb+'/#/purchase-course?notchInScreen='+notchInScreen+'&studentids='+studentids+'&orderid='+orderid+'&authmark='+authmark+'&pageid='+pageid;
} else if(type == 'cost'){
path = commUrlWeb+'/#/order-cost?notchInScreen='+notchInScreen+'&studentids='+studentids+'&orderid='+orderid+'&authmark='+authmark+'&pageid='+pageid;
} else if(type == 'contract'){
path = commUrlContract+'/#/contract-initiate?orderid='+orderid+'&contractid='+contractid+'&ordernum='+ordernum+'¬chInScreen='+notchInScreen;
} else if(type == 'appsign'){
path = commUrlContract+'/#/contract-appsign?xhd_contract_id='+contractid+'¬chInScreen='+notchInScreen;
}
console.log(path);
plus.navigator.removeSessionCookie();
plus.navigator.removeAllCookie();
if(type == 'contract' || type == 'appsign'){
var exp = new Date();
exp.setTime(exp.getTime() + 30*24*60*60*1000);
plus.navigator.setCookie(commUrlContract, 'xhd_contract_data='+ encodeURIComponent(JSON.stringify(cookieObj))+';expires='+ exp.toGMTString() +'; path=/');
}
creatorWebview();
function creatorWebview(){
// 创建子Webview
readWebview = plus.webview.create(path, 'h5page', {
top: 0,
bottom: 0,
cachemode: 'noCache',
contentAdjust: false
});
self.append(readWebview);
}
// 页面加载后自动打开
document.addEventListener('DOMContentLoaded', function() {
if(readWebview) {
readWebview.loadURL(v.path);
} else {
auto = true;
}
}, false);
});
操作步骤:
看上面描述
预期结果:
新的Cookie
实际结果:
第一次Cookie值不正确
bug描述:
iOS中设置Cookie,切换账号后第一次进入h5,Cookie值获取的为上一次的值或者为空
在首页和进入h5的页面用plus.navigator.removeSessionCookie()和plus.navigator.removeAllCookie()清除上一次的Cookie
但是每次切换账号后,清除再进入,获取到的值为上一账号的Cookie,获取是值获取不到
更多关于uni-app中H5页面获取Cookie的值不正确的实战教程也可以访问 https://www.itying.com/category-93-b0.html
很急的,官方出来看看
我看一下
我现在做了一套方案可行 在进入首页的时候清除Cookie 在需要进入h5的页面setCookie, 就是不要等到打开h5的时候再去清除和set
可以再验证一下,清除和set两个是否是异步,或者是需要的时间差,不然又是一个大坑
在uni-app的H5环境中,iOS设备上Cookie获取不正确的问题通常与Webview缓存机制和Cookie作用域有关。从代码分析,您使用了plus.navigator.removeAllCookie()清除Cookie,但在iOS Webview中可能存在延迟或作用域限制。
建议检查以下几点:
-
Cookie作用域匹配:确保设置Cookie时使用的域名与H5页面域名完全一致,包括协议、主域名和端口。iOS Webview对Cookie作用域要求严格,不匹配会导致读取失败。
-
清除时机问题:在设置新Cookie前,尝试增加延迟确保清除操作完成:
plus.navigator.removeAllCookie(); setTimeout(() => { // 设置新Cookie }, 100);

