android中Webview设置多个cookie参数

来源:互联网 发布:cad of mac中文破解版 编辑:程序博客网 时间:2024/06/10 07:23

有时候需要在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这些属性,用“;”来分割开 ,只写了这两个固定属性,多个属性如此以此类推即可。有点坑啊~