WebView无法在Android 2.3.x上保存cookie

时间:2014-06-16 23:18:30

标签: android android-webview

所以我一直试图让WebView正常工作来验证应用中使用的用户会话。它适用于所有4.0+设备但是当我尝试在2.3.6和2.3.7设备上使用相同的进程时,它会在日志中抛出此异常:

com.myapp.WebActivity E/webkit﹕ parse cookie failed for: request_uri=xxxxxxxx; path=/; expires=Mon, 16-Jun-2014 00:00:00; domain=;

它不会使应用程序崩溃,但不会保存正确验证用户会话所需的这一个cookie。我已经查看了Android源代码,看来在尝试保存此特定Cookie时,正在发生RunTimeExceptionHere is the Android Source抛出并捕获异常的地方。我不能100%确定下一步要去哪里,因为cookie在4.0+上正确保存,这似乎是一个AOSP错误。此外,在WebView加载后,CookieManager没有cookie,它会抛出异常,但还有其他。

所以我真正的问题是:无论如何都要手动获取从WebView页面加载返回的cookie,还是可以通过Android 2.3 WebView以某种方式自动保存cookie?

提前致谢。

1 个答案:

答案 0 :(得分:0)

以下是我用来检查和保存后续WebView获取的cookie的方法。它肯定适用于Android 2.2,以及Android 4.X。

检查:

// see if the cookie is already set up
boolean cookieAlreadySetUp = false;
String cookie = cookieManager.getCookie(urlHost);
if ( cookie != null && cookie.length() > 0 ) {
    String[] cookies = cookie.split(";");

    for ( int i = 0; i < cookies.length; i++ ) {
        String oneCookie = cookies[i];
        if ( oneCookie.trim().equals(SharedData.COOKIE_STRING) ) {
            cookieAlreadySetUp = true;
            break;
        }
    }
}

保存:

cookieManager.setAcceptCookie(true);
cookieManager.setCookie(urlHost, myCookieString);
CookieSyncManager.getInstance().sync();

// give time for the cookie to become known since the save process is asynchronous to this thread
SystemClock.sleep(100);

请注意cookie管理器的异步性质,包括添加或删除cookie,以及测试其存在。