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 ListgetAllCookies(){ 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