1. 程式人生 > >android中Webview設定多個cookie引數

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這些屬性,用“;”來分割開 ,只寫了這兩個固定屬性,多個屬性如此以此類推即可。有點坑啊~