继上一篇WebView拦截器出来Cookie后,在测试过程中又发现了问题。使用拦截器来强塞Cookie在Android5.0之后的版本是没有问题,但是之前的版本使用过时的api来强塞Cookie就会发生线程阻塞。过时api如下:
public WebResourceResponse shouldInterceptRequest(WebView view,
String url)
思考问题
开始我一直思路在为什么会发生阻塞上,使用了子线程等方式都无法解决问题,后来和服务端聊天的过程中知道了他们使用了ajax的DWR框架,我就开始搜索之路。
Cookie是什么
Cookie是保存了Session和一系列跟用户信息有关的东西,它存放与用户本地,可以保持用户的登录状态。Cookie中有domain和path,domain表示的是cookie所在的域,path表示cookie所在的目录。
原因
之前的取Cookie的代码只加了domain没有加path。所有服务端无法取到Cookie了,为此我把上一次代码进行了修改,如下:
private void syncCookie(String url){
try {
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeAllCookie();
List<Cookie> cookies = BaseSupport.getCookieStore().getCookies();
Log.i(TAG, "cookie=" + cookies);
if (cookies != null) {
for (Cookie cookie : cookies) {
// String cookieString = cookie.getName() + "="
// + cookie.getValue() + ";domain=" + cookie.getDomain();
String cookieString = cookie.getName() + "=" + cookie.getValue()
+ ";domain=" + cookie.getDomain() + ";path=/;";
cookieManager.setCookie(url, cookieString);
}
CookieSyncManager.getInstance().sync();
}
} catch (Exception e) {
e.printStackTrace();
}
}
这样就可以解决问题了,还有一点就是syncCookie要加载load(url)的之前setting之后。
参考:[http://blog.csdn.net/wayne_sulong/article/details/43679255]