Necesito obtener todas las cookies del navegador.


106

Necesito almacenar todas las cookies en mi navegador usando JavaScript. ¿Cómo puede hacerse esto?


5
nayagi, desafortunadamente si respondemos a su pregunta, tendría un software que no es menos que MALWARE.
Jon Limjap

19
@Jon Limjap, eso no es del todo cierto. Existen escenarios legítimos para poder enumerar todas las cookies en un navegador web sin ser malware.
Franci Penov

Espera un segundo. ¿Todas las galletas? ¿Inicia sesión desde cualquier sitio web? Eso es malware ...
alexyorke

Tengo una situación (aplicaciones web detrás del firewall para una empresa) en la que hacer esto sería útil y bastante legítimo. Sin embargo, el problema existe porque tenemos demasiados dominios internos (principalmente a través de hosts virtuales), por lo que se podría argumentar que la solución es usar el inicio de sesión único.
ClubbedAce

Respuestas:


84

Solo puede acceder a las cookies de un sitio específico. Al usar document.cookieobtendrá una lista de pares clave = valor de escape separados por un punto y coma.

secret=do%20not%20tell%you;last_visit=1225445171794

Para simplificar el acceso, debe analizar la cadena y eliminar todas las entradas:

var getCookies = function(){
  var pairs = document.cookie.split(";");
  var cookies = {};
  for (var i=0; i<pairs.length; i++){
    var pair = pairs[i].split("=");
    cookies[(pair[0]+'').trim()] = unescape(pair.slice(1).join('='));
  }
  return cookies;
}

Entonces podrías escribir más tarde:

var myCookies = getCookies();
alert(myCookies.secret); // "do not tell you"

5
esto no captura el espacio después del punto y coma (";") por lo que las teclas tienen un espacio al frente ... use /; ? / al dividir para eliminarlos?
Carter Cole

Consulte este fragmento para analizarlo document.cookies(del libro de O'Reilly).
Bentley4

Realmente debería agregar .trim () al par [0] para asegurarse de que no haya espacios iniciales.
Andrew Killen

37
  1. No puede ver las cookies de otros sitios.
  2. No puede ver las HttpOnlycookies.
  3. Todas las cookies que puede ver están en la document.cookiepropiedad, que contiene una lista de pares separados por punto y comaname=value .

27

No puedes. Por diseño, por motivos de seguridad, puede acceder solo a las cookies establecidas por su sitio. StackOverflow no puede ver las cookies establecidas por UserVoice ni las configuradas por Amazon.


5
¿Cómo hizo Facebook eso ...? ¡Siempre vi que Facebook muestra anuncios relacionados con lo que busqué en Google!
Ari

16
En realidad, Facebook coloca sus propias cookies en cada sitio ... usando su botón Me gusta. Apuesto a que Google hace lo mismo en los botones +1 o incluso en los scripts de estadísticas del sitio.
PhiLho

1
gracias ..., me está abriendo los ojos. Creo que cualquier tipo de aplicación relacionada con ellos servirá, incluido el inicio de sesión mediante la aplicación de cuenta de redes sociales.
Ari

2
@SoursopTree - ¿No es AdChoices? Facebook usa AdChoices, que es un servicio de Google que muestra contenido basado en sus búsquedas a través de Google. Stackoverflow también usa AdChoices. Puede que esté un poco fuera de lugar en los detalles exactos, pero supongo que eso es en lo que estás pensando.
Rik

1
@KeepMove llamamos a esta terminología como sincronización de cookies
ericdemo07

12

Para recuperar todas las cookies del documento actual abierto en el navegador, vuelve a utilizar la document.cookiepropiedad.


4

Enfoque moderno.

let c = document.cookie.split(";").reduce( (ac, cv, i) => Object.assign(ac, {[cv.split('=')[0]]: cv.split('=')[1]}), {});

console.log(c);

;)


2

Dado que el título no especificaba que tenía que ser programático, asumiré que fue un problema genuino de depuración / gestión de privacidad y la solución depende del navegador y requiere un navegador con un peaje de gestión de cookies detallado incorporado y / o un módulo de depuración o un complemento / extensión. Voy a enumerar uno y pedirle a otras personas que escriban en los navegadores que conocen en detalle y que sean precisos con las versiones.

Cromo, construcción de hierro (SRWare Iron 4.0.280)

El menú de llave inglesa (herramienta): Opciones / Avanzado / [Mostrar cookies y permisos de sitios web] Para dominios / sitios relacionados, escriba el sufijo en el cuadro de búsqueda (como .foo.tv). Advertencia: cuando tenga un nodo (sitio o cookie), haga clic en resaltado, solo use [Eliminar] para eliminar subárboles específicos. El uso de [Eliminar todo] eliminará las cookies de todos los sitios seleccionados mediante la búsqueda y desperdiciará su sesión de depuración.


1

Se agregó trim () a la clave en el objeto y asígnele el nombre str, para que quede más claro que estamos tratando con una cadena aquí.

export const getAllCookies = () => document.cookie.split(';').reduce((ac, str) => Object.assign(ac, {[str.split('=')[0].trim()]: str.split('=')[1]}), {});


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.