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