0

我制作了一个最低要求 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);
4

2 回答 2

1

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

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

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

您编写的代码似乎都是正确的,而 API 9 设备不发送 cookie 而 API 14 设备发送了类似的问题。恐怕我不知道它为什么会起作用,但这是唯一对我有帮助的东西。

于 2013-09-06T17:18:46.253 回答
0

就像 Hylianpuffball 的答案一样,这个想法是在您的域名下方添加一个字符。我认为 CookieManager 正在寻找类似 .domain.com 的内容,并且完成了某种子字符串来获取域名。

只需添加一个点或任何字符,它就会起作用

于 2013-11-21T17:06:50.360 回答