Android 2.2上的Cookie在WebView中不可用
我制作了一个Android应用程序,最低要求API为8。 用户在我的后端通过cookie进行身份验证。这适用于api级别为9或更高的所有设备。 Cookie与CookieManager一起保存: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
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这样的东西,并且做了一些子字符串来获取域名 只要添加一个点或任何字符,它就会工作