He decidido escribir este post sobre la gestión de cookies en Java y Android porque he visto que hay muchas dudas y problemas sobre esto. De esta forma podremos controlar las cookies que tenemos en la aplicación desde cualquier actividad o fragmento, teniendo sólamente una instancia de CookieManager (al tener más de una no podremos acceder a las cookies que hemos guardado anteriormente).
Es una clase muy básica que se puede hacer más compleja, pero como ejemplo sencillo para entender y gestionar las cookies desde cualquier parte de nuestra aplicación creo que es suficiente.
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.HttpCookie;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
public class CookiesGestor {
private static CookiesGestor instance;
private static CookieManager cookieManager;
private CookiesGestor(){
cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
}
public static CookiesGestor getInstance(){
if(instance==null) {
instance = new CookiesGestor();
}
return instance;
}
public void addCookie(String name, String value){
HttpCookie cookie = new HttpCookie(name, value);
try {
cookieManager.getCookieStore().add(new URI(AppConstant.SERVER_URL), cookie);
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
public List getAllCookies(){
return cookieManager.getCookieStore().getCookies();
}
public HttpCookie getCookie(String name){
for(HttpCookie cookie:getAllCookies()){
if(cookie.getName().equals(name)){
return cookie;
}
}
return null;
}
}
De esta forma siempre que queramos obtener las cookies de nuestra aplicación debemos obtener una instancia de esta clase de esta forma:
CookiesGestor cookiesGestor = CookiesGestor.getInstance();
Podemos añadir cookies a nuestro gestor de esta forma:
cookiesGestor.addCookie(HEADER_AUTHORIZATION, "MyCreadentials");
Así podremos acceder a nuestra cookie que hemos creado al crear una sesión a un servidor y guardarla para futuras llamadas.
También podemos obtenerlas de esta manera, pasando como parámetro el nombre de la cookie para obtener su valor:
cookiesGestor.getCookie(HEADER_AUTHORIZATION)
Si tienes alguna duda o pregunta puedes escribirme un comentario e intentare ayudarte 😉
Deja un comentario