Android CookieManager setCookie没有设置任何内容

时间:2012-07-28 10:44:15

标签: android cookies

在我的应用程序中,我从HttpGet请求中获取两个cookie并将它们存储在CookieManager中,如下所示:

//Clear old cookies
CookieManager.getInstance().removeAllCookie();
CookieSyncManager.getInstance().sync();

//Save the two cookies: auth token and session info
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies != null) {
    for (Cookie cookie : cookies) {
        String cookieString = cookie.getName() + "=" + cookie.getValue() + "; Domain=" + cookie.getDomain();
        CookieManager.getInstance().setCookie("http://alpha.mydomainname.com", cookieString);
    }

    System.out.println(CookieManager.getInstance().hasCookies()); //Prints false in 2.3,  true in 4.0.3

    CookieSyncManager.getInstance().sync();

    System.out.println(CookieManager.getInstance().hasCookies()); //Also prints false in 2.3 and true in 4.0.3
}

我在两个不同的设备中测试相同的代码,有趣的是,在4.0.3中正确设置了cookie(并且在应用程序的启动之间也是如此),而不是在2.3.3中。当我说它们没有设置时,我的意思是hasCookies()返回false,当我提供URL时,getCookie()也返回null。

我在调用setCookie时尝试了Cookie的所有可能组合:“http://alpha.mydomainname.com”,“http://www.mydomainname.com”,“http://mydomainname.com “,”mydomainname.com“,”alpha.mydomainname.com“,”。mydomainname.com“,”www.mydomainname.com“,它们都不起作用。请帮忙。

5 个答案:

答案 0 :(得分:4)

我最近遇到了类似的问题,以下解决方案对我有用。我在开始时创建/获取CookieSyncManager和CookieManager的实例,并在整个代码中使用它们,而不是再次创建新实例。我还必须尝试在正确的域上设置cookie - 我必须将其设置为出现在其中一个重定向中的域。

final CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(context);
final CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();

//Save the two cookies: auth token and session info
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies != null) {
    for (Cookie cookie : cookies) {
        String cookieString = cookie.getName() + "=" + cookie.getValue() + "; Domain=" + cookie.getDomain();
        cookieManager.setCookie("http://mydomainname.com", cookieString);
    }
    cookieSyncManager.sync();
}

答案 1 :(得分:0)

我还遇到了CookieManager的一些奇怪的行为,最终我得到了一个解决方案 - 但它确实有效。 我没有使用CookieManager,而是使用了http Cookie标头,因此例如使用HttpUrlConnection它可能看起来像这样:

//Save the two cookies: auth token and session info
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
    String cookieString = cookie.getName() + "=" + cookie.getValue();
    myHttpURLConnection.setRequestProperty("Cookie", cookieString);
}

当然,如果您需要坚持使用这些cookie,您必须自己动手并在某处保存它们的价值以供以后使用...

答案 2 :(得分:0)

我找到了一个使用后台线程设置cookie的插件。

iOS 9 Android 5 上进行测试:

https://github.com/kristianhristov/cordova-cookie-master

答案 3 :(得分:0)

cookie不能包含分号,分号表示分隔符int cookie。

答案 4 :(得分:0)

我遇到了同样的问题。尚不清楚如何使用setCookie方法。如果您的Cookie项很少(例如在我的情况下),则应该在一些循环中使用它:

val cookies = "key1=someValue1;key2=someValue2;key3=someValue3"
val cookiesList = cookies.split(";")
cookiesList.forEach { item ->
 CookieManager.getInstance().setCookie("http://someHost.com", item)
}

所以您不能使用它:

CookieManager.getInstance().setCookie("http://someHost.com", "key1=someValue1;key2=someValue2;key3=someValue3")