android中Webview設定多個cookie引數
阿新 • • 發佈:2018-12-30
有時候需要在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這些屬性,用“;”來分割開 ,只寫了這兩個固定屬性,多個屬性如此以此類推即可。有點坑啊~