在我的应用程序中,我从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“,它们都不起作用。请帮忙。
答案 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 上进行测试:
答案 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")