Al intentar leer el valor de alguna cookie en particular con JavaScript, nos encontraremos en el inconveniente que los datos arrojados por
document.cookie conforman una cadena de caracteres del tipo
nombreCookie1=valorCookie1; nombreCookie2=valorCookie2 en el caso de que existan 2 cookies para nuestro dominio. Como se puede ver, los valores de las distintas cookies se concatenan y separan con un punto y coma... definitivamente lo arrojado por document.cookie se aleja bastante del dato que se pretende obtener. Para obtener el valor real de, por ejemplo
nombreCookie1, hará falta una función encargada de parsear esa cadena y retornarnos lo que corresponda, en este caso
valorCookie1. Lo más cómodo resultaría desarrollar una función llamada
leerCookie la cual reciba como parámetro el nombre de la cookie que se quiere obtener su valor y nos retorne
false en caso de que la misma no exista o su valor en caso contrario.
Para realizar dicha función nos valdremos de los métodos indexOf y substr, ambos pertenecientes a un objeto string. Una de las formas de construir esta función puede ser como sigue:
JavaScript:
-
function leeCookie(nombre)
-
{
-
// Obtengo la cadena arrojada por document.cookies, si es nula retorno false
-
var cookies=document.cookie; if(!cookies) return false;
-
// Guardo en comienzo la posición del 1º caracter del nombre de la cookie que se busca
-
var comienzo=cookies.indexOf(nombre);
-
// Si la posición obtenida es inválida es porque no existe una cookie con ese nombre; se retorna false
-
if(comienzo==-1) return false;
-
// Guardo en comienzo la posición del 1º caracter del valor que pretendo retornar
-
comienzo=comienzo+nombre.length+1;
-
// Guardo en cantidad la cantidad de caracteres de largo que posee el valor a retornar
-
cantidad=cookies.indexOf("; ", comienzo)-comienzo; if(cantidad<=0) cantidad=cookies.length;
-
// Fracciono la cadena para retornar solo el valor de la cookie de interés
-
return cookies.substr(comienzo, cantidad);
-
}
De esta forma podremos llamar a la función leeCookie('language') y la misma nos retornaría el valor de la cookie cuyo nombre es language o falso en caso de que esa cookie no exista.
Cualquier consulta comenten.