Android 2.2上的Cookie在WebView中不可用

时间:2013-02-21 10:45:31

标签: android cookies webview cookiemanager

我用最低要求的API 8制作了一个Android应用程序。 用户在我的后端使用cookie进行身份验证。这适用于api级别为9或更高的每台设备。 Cookie使用CookieManager保存:

CookieManager cManager = CookieManager.getInstance();
CookieSyncManager.createInstance(LauncherApplication.getAppContext());
cManager.setAcceptCookie(true);
cManager.setCookie(".xxxxxxxx.xx", "MobileGuid=" + guid);
CookieSyncManager.getInstance().sync();

我检查这个Cookie是否也可用于CookieManager:

public static boolean hasCookie(){
    CookieManager cManager = CookieManager.getInstance();
    String cookieString = cManager.getCookie(".xxxxxxx.xx");
    if(cookieString != null && cookieString.contains("MobileGuid")){
        return true;
    }
    return false;
}

此返回始终为true,但如果Android版本高于2.2,则Cookie在WebView中可用。 (我用phpinfo检查了这个)

我的WebView配置如下所示:

String databasePath = LauncherApplication.getAppContext().getApplicationContext().getDir("database",
            Context.MODE_PRIVATE).getPath();

    WebSettings mainWebSettings = mainWebView.getSettings();
    mainWebSettings.setJavaScriptEnabled(true);
    mainWebSettings.setAppCacheEnabled(true);
    mainWebSettings.setDatabaseEnabled(true);
    mainWebSettings.setDomStorageEnabled(true);
    mainWebSettings.setDatabasePath(databasePath);

2 个答案:

答案 0 :(得分:1)

调用cManager.setCookie()时,请尝试传递

cManager.setCookie("a.xxxxxxxx.xx", "MobileGuid=" + guid + "; domain=xxxxxxx.xx");

所以我在第一个参数(字面意思是字符'a')中添加了“a”,并将"domain=xxxxxxx.xx"添加到cookie本身。

您编写的代码似乎都是正确的,我在API 14设备上遇到了与API 9设备类似的问题。我担心我不确切知道它为什么会起作用,但它是唯一能帮助我的东西。

答案 1 :(得分:0)

就像Hylianpuffball的答案一样,我们的想法是在你的域名下添加一个字符。我认为CookieManager正在寻找像.domain.com这样的东西,并且完成了一些子串来获取域名。

只需添加一个点或任何字符即可正常工作