Android CookieManager setCookie no establece nada

en mi aplicación, obtengo dos cookies de una solicitud HttpGet y las almaceno en CookieManager de esta manera:

//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
}

Estoy probando el mismo código en dos dispositivos diferentes y lo gracioso es que las cookies se configuran (y también se transfieren entre lanzamientos de la aplicación) correctamente en 4.0.3 pero no en 2.3.3. Cuando digo que no están configurados, quiero decir que hasCookies() devuelve falso y también getCookie() devuelve nulo cuando proporciono la URL.

Probé todas las combinaciones posibles para la URL de la cookie al llamar a setCookie: "http://alpha.mydomainname.com", "http://www.mydomainname.com", "http://mydomainname.com", " mydomainname.com", "alpha.mydomainname.com", ".mydomainname.com", "www.mydomainname.com", ninguno de ellos funciona. Por favor ayuda.

preguntado el 28 de julio de 12 a las 11:07

¿Alguna vez lograste que esto funcionara? Me encuentro con el mismo problema ahora... -

Necesito algunos intentos más para estar seguro, pero estoy encontrando algo como lo siguiente: si el encabezado Caduca está configurado, la cookie se guarda en 2.3.3 pero no en 4.0.4, mientras que si falta Caduca, la cookie se guarda en 4.0.4 .2.3.3 pero no XNUMX. -

¿Has solucionado tu problema? Estoy enfrentando lo mismo aquí.... -

Vea también stackoverflow.com/questions/1652850/…. En mi caso, escribí la URL habitual (https://example.com/) como un dominio. En algunos casos sería mejor establecer .example.com. -

5 Respuestas

Recientemente tuve un problema similar y la siguiente solución funcionó para mí. Creo/obtengo instancias de CookieSyncManager y CookieManager al principio, y las uso en todo el código, en lugar de crear nuevas instancias nuevamente. También tuve que experimentar configurando la cookie en el dominio correcto; tuve que configurarla en el dominio que aparece en uno de los redireccionamientos.

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();
}

Respondido 05 ago 14, 01:08

Me he enfrentado al mismo problema. No está tan claro cómo usar setCookie método. Debería usarlo con algún bucle si tiene pocos elementos con cookies (como en mi caso):

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

Así que no puedes úsalo como:

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

respondido 14 mar '19, 10:03

Gracias. Es cierto - Dmitry

La cookie no puede incluir el punto y coma, porque el punto y coma significa separador de cookies int.

contestado el 03 de mayo de 16 a las 12:05

También me encontré con algunos comportamientos extraños con CookieManager, eventualmente terminé con una solución que es una solución alternativa, pero funciona.
En lugar de usar CookieManager Acabo de usar los encabezados de cookies http, por ejemplo, usando HttpUrlConnection puede verse así:

//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);
}

Por supuesto, si necesita conservar estas cookies, tendrá que hacerlo usted mismo y guardar su valor en algún lugar para su uso posterior...

Respondido 04 Abr '13, 12:04

Encontré un complemento que usa un hilo de fondo para configurar cookies.

Probado en iOS 9 y Android 5:

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

Respondido el 25 de Septiembre de 15 a las 21:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.