求助鸿蒙组件,webview setCookie能取到数值,但是每次结束app进程,cookie数值就不见了。

做一个webview组件,思路如下:

用户首次登陆,cookie为空,webivew.load(url),然后通过onPageLoaded获得cookie,再setCookie,下次用户二次登陆可以直接登陆而不用输入账号密码。

代码如下:

url1 = "xxxxxxxx";
webView = (WebView) findComponentById(ResourceTable.Id_webview);
webView.getWebConfig().setJavaScriptPermit(true);
cookieStore = CookieStore.getInstance();
cookieStore.setCookieEnable(true);
cookieStore.setCrossDomainCookieEnable(webView, true);

if (cookieStore.getCookie(url1) == null) {
    webView.load(url1);
} else {
    String[] cookies = cookieStore.getCookie(url1).split(";");
    for (int i = 0; i < cookies.length; i++) {
        cookieStore.setCookie(url1,cookies[i]);
    }
    cookieStore.persist();
    webView.load(url1);
}

webView.setWebAgent(new WebAgent() {

    @Override
    public boolean isNeedLoadUrl(WebView webView, ResourceRequest request) {
       
        return true;
    }
    @Override
    public void onPageLoaded(WebView webView, String url) {
        super.onPageLoaded(webView, url);
        cookieStore.setCookieEnable(true);
        cookieStore.setCrossDomainCookieEnable(webView, true);
        cookieStore.getCookie(url1);
        cookieStore.persist();
    }
});
在setCookie中能看到key=value值,但是app进程一结束,cookie就失效。此问题困扰我好几天,望各位大神不吝赐教!谢谢!

webview
2021-09-27 15:51:44
浏览
收藏 1
回答 2
待解决
回答 2
按赞同
/
按时间
红叶亦知秋
1

你读取加载url中的cookie 他是实时的 不是存在本地的,所以你第二次打开的时候回cookie就失效了

 

第一步实现登录功能,然后返回cookie相关参数,在然后将cookie保存在本地中

 

第二步在加载时候(isNeedLoadUrl)将cookie 拼接传给后台,

 

    //设置cookie
                ohos.agp.components.webengine.CookieStore mCookieStore = ohos.agp.components.webengine.CookieStore.getInstance();
                mCookieStore.setCookieEnable(true);
                mCookieStore.setCookie(url, "Domain="+"1111");
                mCookieStore.setCookie(url, "Path=/");
                mCookieStore.setCookie(url, "Value=00000");
     //获取cookie
                ohos.agp.components.webengine.CookieStore mCookieStore = ohos.agp.components.webengine.CookieStore.getInstance();
                String cookiestr=mCookieStore.getCookie(url);
                HiLogUtils.PrintLog(cookiestr);

设置获取cookie代码如下

public class WebviewSlice extends AbilitySlice {
    private static final String EXAMPLE_URL = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=android%E7%89%88%E6%9C%AC%E5%8F%B7&fenlei=256&oq=android%25E7%2589%2588%25E6%259C%25AC%25E4%25BB%25A3%25E5%258F%25B7&rsv_pq=a1072f0e00139b17&rsv_t=1790Ohd03bVT21DCnl7FeJacxdjk58eJxGpr4r41zM6bzt8pHm62TUYAMD4&rqlang=cn&rsv_dl=tb&rsv_enter=0&rsv_btype=t&rsv_sug3=110&rsv_sug1=63&rsv_sug7=100&rsv_sug2=0&inputT=283&rsv_sug4=1617";
    @Override
    protected void onStart(Intent intent) {
        super.onStart(intent);
        setUIContent(ResourceTable.Layout_webview_slice);
        WebView webView = (WebView) findComponentById(ResourceTable.Id_webview);
        webView.getWebConfig().setJavaScriptPermit(true);  // 如果网页需要使用JavaScript,增加此行;如何使用JavaScript下文有详细介绍
        webView.setWebAgent(new WebAgent() {
            @Override
            public boolean isNeedLoadUrl(WebView webView, ResourceRequest request) {
                if (request == null || request.getRequestUrl() == null) {
//                    LogUtil.info(TAG,"WebAgent isNeedLoadUrl:request is null.");
                    return false;
                }
                String url = request.getRequestUrl().toString();
                //设置cookie
                ohos.agp.components.webengine.CookieStore mCookieStore = ohos.agp.components.webengine.CookieStore.getInstance();
                mCookieStore.setCookieEnable(true);
                mCookieStore.setCookie(url, "Domain="+"1111");
                mCookieStore.setCookie(url, "Path=/");
                mCookieStore.setCookie(url, "Value=00000");
                if (url.startsWith("http:") || url.startsWith("https:")) {
                    webView.load(url);
                    return false;
                } else {
                    return super.isNeedLoadUrl(webView, request);
                }
            }

            @Override
            public void onPageLoaded(WebView webView, String url) {
                super.onPageLoaded(webView, url);
                //获取cookie
                ohos.agp.components.webengine.CookieStore mCookieStore = ohos.agp.components.webengine.CookieStore.getInstance();
                String cookiestr=mCookieStore.getCookie(url);
                HiLogUtils.PrintLog(cookiestr);
            }
        });
        webView.load(EXAMPLE_URL);
    }
}

 

答复引用于:华为开发者联盟开发者支持团队

分享
微博
QQ
微信
回复
2021-10-09 15:23:34
丨张明亮丨

我之前也遇到同样的问题,最后是取出cookie保存数据库,然后重启app时从数据库提取,来实现的。按理说是有保存cookie的api的但是没有效果,不知道现在是不是好使了。

分享
微博
QQ
微信
回复
2021-10-09 22:57:43
相关问题
onehop Device Ability 这个模板咋不见了
4072浏览 • 1回复 待解决
HarmonyOS libEGL.so库在 API12 上不见了
206浏览 • 1回复 待解决
能否同步webviewcookieapp中的cookie
874浏览 • 1回复 待解决
如何拿到文本框文字的宽度数值
270浏览 • 1回复 待解决
关于鸿蒙APP升级问题求助
5784浏览 • 1回复 待解决
HarmonyOS 如何同步cookiewebview
260浏览 • 1回复 待解决
HarmonyOS 如何杀死 app 进程
334浏览 • 1回复 待解决
WebView进程模型和渲染机制是什么
1963浏览 • 1回复 待解决