我用最低要求的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);
答案 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这样的东西,并且完成了一些子串来获取域名。
只需添加一个点或任何字符即可正常工作