Necesito obtener todas las cookies del navegador.

106

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

informatik01
fuente
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"
aemkei
fuente
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 .
Franci Penov
fuente
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.

PhiLho
fuente
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.

Codificador
fuente
4

Enfoque moderno.

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

console.log(c);

;)

Prabu samvel
fuente
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.

ZXX
fuente
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]}), {});
Netanel R
fuente
0

Lo que estás pidiendo es posible; pero eso solo funcionará en un navegador específico. Tienes que desarrollar una aplicación de extensión del navegador para lograr esto. Puede leer más sobre la API de Chrome para comprender mejor. https://developer.chrome.com/extensions/cookies

Emeka Agustín
fuente