Android CookieManager setCookie没有设置任何内容

Ayb*_*gür 15 cookies android

在我的应用程序中,我从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
}
Run Code Online (Sandbox Code Playgroud)

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

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

小智 8

我也遇到过同样的问题。目前还不太清楚如何使用该setCookie方法。如果你有一些带有 cookie 的项目(就像我的例子),你应该将它与一些循环一起使用:

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

所以你不能像这样使用它:

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


小智 5

我最近遇到了类似的问题,以下解决方案对我有用。我在开始时创建/获取 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();
}
Run Code Online (Sandbox Code Playgroud)


Ino*_*man 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);
}
Run Code Online (Sandbox Code Playgroud)

当然,如果您需要保留这些 cookie,您将必须自己完成并将它们的值保存在某处以供以后使用......