webView设置cookie

本文介绍如何在Android应用的WebView中设置并同步Cookie,确保token能够正确保存,实现用户状态的保持。

公司的项目中采用原生加上H5的方式进来开发,遇到的第一个个问题就是给我们的webview设置cookie保存状态。就是将token保存到cookie中去。代码如下:
加载url

    @Override
    public void loadUrl() {
        String index_url = ACache.get(self).getAsString(Config.INDEX_URL);
        if (index_url == null) {
            return;
        }
        baseUrl = Url.BASE + index_url;
        LogUtil.d("TAG", "baseUrl=" + baseUrl);
        syncCookie(baseUrl);
        setWebView();
        binding.mainWv.loadUrl(baseUrl);
    }

将我的token同步到的webView的cookie中

 private void syncCookie(String url) {
        try {
            LogUtil.d("TAG", url);

            CookieSyncManager.createInstance(self);

            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);
            cookieManager.removeSessionCookie();// 移除
            cookieManager.removeAllCookie();
            String oldCookie = cookieManager.getCookie(url);
            if (oldCookie != null) {
                LogUtil.d("TAG", oldCookie);
            }

            StringBuilder sbCookie = new StringBuilder();
            URL urlCookie = new URL(url);
            String host = urlCookie.getHost();

            String token = ACache.get(self).getAsString(Config.TOKEN);
            sbCookie.append("jPowerBOSCookieToken=" + token + ";");
            sbCookie.append("domain=" + host + ";");
            sbCookie.append("path=/;");

            String cookieValue = sbCookie.toString();
            cookieManager.setCookie(url, cookieValue);
            CookieSyncManager.getInstance().sync();

            String newCookie = cookieManager.getCookie(url);
            if (newCookie != null) {
                LogUtil.e("TAG", "newCookie=" + newCookie);
            }
        } catch (Exception e) {
            LogUtil.e("TAG", e.toString());
        }
    }

设置webview的属性

private void setWebView() {
        WebSettings settings = binding.mainWv.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDefaultTextEncodingName("utf-8");
        /**
         * 支持内容重新布局
         */
        settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        /**
         * 设置可以访问文件
         */
        settings.setAllowFileAccess(true);
        /**
         * 支持自动加载图片
         */
        settings.setLoadsImagesAutomatically(true);
        /**
         * 支持通过JS打开新窗口
         */
        LogUtil.d("TAG", "cacheDirPath=" + cacheDirPath);
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        settings.setCacheMode(WebSettings.LOAD_DEFAULT);
        settings.setDomStorageEnabled(true);
        settings.setDatabaseEnabled(true);
        settings.setAppCachePath(cacheDirPath);
        settings.setAppCacheEnabled(true);

        binding.mainWv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        binding.mainWv.addJavascriptInterface(new Contact(), "Android");
        binding.mainWv.requestFocus();
        binding.mainWv.setWebViewClient(new MyWebViewClient());
        binding.mainWv.setWebChromeClient(new MyWebChromeClient());
        binding.mainWv.setOnKeyListener(new MyOnKeyListener());
        binding.mainWv.setDownloadListener(new MyWebViewDownLoadListener());
    }

在webView设置属性之前同步cookie,不然无效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值