WebView加载Ajax的Cookie丢失认证问题

继上一篇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 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]

你可能感兴趣的:(WebView加载Ajax的Cookie丢失认证问题)