2012-07-28 17 views
12

en mi solicitud, me estoy poniendo dos galletas a partir de una solicitud de HttpGet y almacenarlos en el CookieManager así:Android CookieManager setCookie no establece nada

//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 diferentes dispositivos y lo curioso es que las cookies se establecen (y también se transfieren entre los 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 false y también getCookie() devuelve null cuando proporciono la URL.

He intentado todas las combinaciones posibles para Cookie URL al llamar a setCookie: "http://alpha.mydomainname.com", "http://www.mydomainname.com", "http: // mydomainname. com "," mydomainname.com "," alpha.midominio.com "," .mydomainname.com "," www.midominio.com ", ninguno de ellos funciona. Por favor ayuda.

+1

¿Alguna vez ha funcionado? Me estoy encontrando con el mismo problema ahora ... –

+1

Necesito algunos intentos más para estar seguro, pero estoy encontrando algo como lo siguiente: si se establece el encabezado Expires, la cookie guarda en 2.3.3 pero no en 4.0 .4, mientras que si carece de Expires, la cookie se guarda en 4.0.4 pero no en 2.3.3. – hly

+0

¿Ha resuelto su problema? Estoy enfrentando lo mismo aquí ... –

Respuesta

0

También encontré algunos comportamientos extraños con CookieManager, finalmente terminé con una solución que es una solución alternativa, pero funciona.
En lugar de utilizar CookieManager acabo de utilizar las cabeceras HTTP de galletas, así que por ejemplo usando HttpUrlConnection que puede parecerse a lo siguiente:

//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 es necesario persistir estas cookies, tendrá que hacerlo wourself y guarde su valor en algún lugar para su uso posterior ...

3

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

0

La cookie no puede incluir el punto y coma, punto y coma por culpa del medio separador int cookies.

-2

Para referencia futura. He probado esto en S7 con Android 7 y Moto X con Android 5

// base domain 
     String domain = "http://www.cudomor.com"; 
     // get instance 
     CookieManager cookieManager = CookieManager.getInstance(); 
     // just to check current cookies on debug mode 
     String currentCookies = cookieManager.getCookie(domain); 
     Log.e("cookieTag", currentCookies); 
     // just in case... 
     cookieManager.setAcceptCookie(true); 
     // in my test, was not necessary put domain or expire or path, just this 
     String cookieString = "cookieName=" + "cookieValue"; 
     // setCookie add or update the cookie 
     cookieManager.setCookie(domain, cookieString);