我们一般在使用WebView去加载H5界面的时候都会同步一下Cookie,一般的都会这么做:
在HttpClient中保存下来的Cookie怎么设置到WebView组件里,让WebView也保持住Cookie状态,也就是登录状态呢?
CookieSyncManager和CookieManager就是做这种事的,下面来看代码里怎么设置Cookie让WebView也保持登录状态:
- /**
- * 同步一下cookie
- */
- pubip
// 设置cookie public static void syncCookie(Context context) {
- CookieSyncManager.createInstance(context);
- CookieManager cookieManager = CookieManager.getInstance();
- cookieManager.setAcceptCookie(true);
- cookieManager.removeSessionCookie();//移除
- cookieManager.setCookie(url, cookies);//cookies是在HttpClient中获得的cookie
- CookieSyncManager.getInstance().sync();
- }
在android里面在调用webView.loadUrl(url)之前一句调用此方法就可以给WebView设置Cookie
注:这里一定要注意一点,在调用设置Cookie之后不能再设置
- webView.getSettings().setBuiltInZoomControls(true);
- webView.getSettings().setJavaScriptEnabled(true);
这类属性,否则设置Cookie无效。
我原来一直是这么设置的,因为后台说需要这两个字段:
JSESSIONID和deliveryManName
cookieManager.setCookie(cookieUrl, "JSESSIONID=" + HcyHttpClient.getCookie("JSESSIONID") + ";token=" + HcyHttpClient.getCookie("token")+";deliveryManName=" + HcyHttpClient.getCookie("deliveryManName") );可是我用代理查看了一下,后台只能看到一个值就是 JSESSIONID,但是看不到这个上传的 token和 deliveryManName
于是我就纳闷了,怎么会这样呢,感觉一直都是这样的啊,怎么尝试都是只有一个值
后台我说看看这样的方法行不行
cookieManager.setCookie(cookieUrl, "deliveryManName=" + HcyHttpClient.getCookie("deliveryManName")); cookieManager.setCookie(cookieUrl,"JSESSIONID="+HcyHttpClient.getCookie("JSESSIONID")); cookieManager.setCookie(cookieUrl,"token="+HcyHttpClient.getCookie("token"));
我一个一个的去设置,看行不行,测试之后,果然都有了
估计设置一个Cookie只能识别一个吧,哎,受教了,有坑有木有。![]()