Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 2.2上的Cookie在WebView中不可用_Android_Cookies_Webview_Cookiemanager - Fatal编程技术网

Android 2.2上的Cookie在WebView中不可用

Android 2.2上的Cookie在WebView中不可用,android,cookies,webview,cookiemanager,Android,Cookies,Webview,Cookiemanager,我制作了一个Android应用程序,最低要求API为8。 用户在我的后端通过cookie进行身份验证。这适用于api级别为9或更高的所有设备。 Cookie与CookieManager一起保存: CookieManager cManager = CookieManager.getInstance(); CookieSyncManager.createInstance(LauncherApplication.getAppContext()); cManager.setAcceptCookie(tr

我制作了一个Android应用程序,最低要求API为8。 用户在我的后端通过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();
public static boolean hasCookie(){
    CookieManager cManager = CookieManager.getInstance();
    String cookieString = cManager.getCookie(".xxxxxxx.xx");
    if(cookieString != null && cookieString.contains("MobileGuid")){
        return true;
    }
    return false;
}
我检查CookieManager是否也提供此Cookie:

CookieManager cManager = CookieManager.getInstance();
CookieSyncManager.createInstance(LauncherApplication.getAppContext());
cManager.setAcceptCookie(true);
cManager.setCookie(".xxxxxxxx.xx", "MobileGuid=" + guid);
CookieSyncManager.getInstance().sync();
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);

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

cManager.setCookie("a.xxxxxxxx.xx", "MobileGuid=" + guid + "; domain=xxxxxxx.xx");
因此,我在第一个参数中添加了一个“a”(字面意思是字符“a”),并在cookie本身中添加了
“domain=xxxxxxx.xx”


您编写的代码似乎都是正确的,我也遇到过类似的问题,API 9设备不发送cookie,而API 14设备发送cookie。很抱歉,我不知道它到底为什么有效,但这是唯一对我有帮助的东西。

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

只要添加一个点或任何字符,它就会工作