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,获取是值获取不到

WeChat_20210524211544.rar


更多关于uni-app中H5页面获取Cookie的值不正确的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

前排,帮忙解决下,马上就要上线了

更多关于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中可能存在延迟或作用域限制。

建议检查以下几点:

  1. Cookie作用域匹配:确保设置Cookie时使用的域名与H5页面域名完全一致,包括协议、主域名和端口。iOS Webview对Cookie作用域要求严格,不匹配会导致读取失败。

  2. 清除时机问题:在设置新Cookie前,尝试增加延迟确保清除操作完成:

    plus.navigator.removeAllCookie();
    setTimeout(() => {
        // 设置新Cookie
    }, 100);
回到顶部