android中Webview设置多个cookie参数

有时候需要在cookie中设置多个参数传递给前端页面,常用的是 token和渠道号 。将N个参数的key-value按照分号分开然后一次设置,一直只使用token第一个参数,可以正常获取,所以没问题,比如


StringBuilder sbCookie = new StringBuilder();
            if (MyApplication.isLogined()) {
                UserBean userinfo = MyApplication.getUserBean();
                if(userinfo != null && !TextUtils.isEmpty(userinfo.getToken())){
                    sbCookie.append(String.format("token" + "=%s",userinfo.getToken()));
                    sbCookie.append(String.format(";from" + "=%s", "android"));
                }
            } else {
                sbCookie.append(String.format("from" + "=%s", "android"));
            }

            //webview在使用cookie前会前判断保存cookie的domain和当前要请求的domain是否相同,相同才会发送cookie
            sbCookie.append(String.format(";domain=%s",aURL.getHost())); //注意,是getHost(),不是getAuthority(),
            sbCookie.append(String.format(";path=%s","/"));

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

最近有需求获取渠道号,发现怎么也获取不到,当把渠道号放在TOKEN的顺序之前的时候,token又获取不到。后来查询一番终于知道正确的姿势应该是每个参数单独设定,如下

StringBuilder sbCookie = new StringBuilder();
            sbCookie.append(String.format("from" + "=%s", "android"));
            sbCookie.append(String.format(";domain=%s",aURL.getHost())); 
            sbCookie.append(String.format(";path=%s","/"));
            cookieManager.setCookie(currentUrl, sbCookie.toString());

            if (MyApplication.isLogined()) {
                UserBean userinfo = MyApplication.getUserBean();
                if(userinfo != null && !TextUtils.isEmpty(userinfo.getToken())){
                    StringBuilder sbCookieToken = new StringBuilder();
                    sbCookieToken.append(String.format("token" + "=%s",userinfo.getToken()));
                    //webview在使用cookie前会前判断保存cookie的domain和当前要请求的domain是否相同,相同才会发送cookie
                    sbCookieToken.append(String.format(";domain=%s",aURL.getHost())); //注意,是getHost(),不是getAuthority(),
                    sbCookieToken.append(String.format(";path=%s","/"));
                    cookieManager.setCookie(currentUrl, sbCookieToken.toString());
                }
            }
            CookieSyncManager.getInstance().sync();
            String newCookie = cookieManager.getCookie(currentUrl);

每一次setCookie操作,都是设置一组对应的cookie,每组cookie都有domain、path这些属性,用“;”来分割开 ,只写了这两个固定属性,多个属性如此以此类推即可。有点坑啊~

你可能感兴趣的:(android-studio)