J'ai besoin de récupérer tous les cookies du navigateur

107

J'ai besoin de récupérer tous les cookies stockés dans mon navigateur en utilisant JavaScript. Comment ceci peut être fait?

informatik01
la source
5
nayagi, malheureusement si nous répondons à votre question, vous auriez un logiciel qui n'est rien de moins qu'un MALWARE.
Jon Limjap
19
@Jon Limjap - ce n'est pas tout à fait vrai. Il existe des scénarios légitimes pour pouvoir énumérer tous les cookies dans un navigateur Web sans être un logiciel malveillant.
Franci Penov
Whoa attendez une seconde. Tous les cookies? Connexion depuis n'importe quel site Web? C'est un malware ...
alexyorke
J'ai une situation (applications Web derrière le pare-feu pour une entreprise) où cela serait pratique et tout à fait légitime. Cependant, le problème existe parce que nous avons trop de domaines internes (principalement via des hôtes virtuels), de sorte que l'on pourrait affirmer que la solution consiste à utiliser l'authentification unique.
ClubbedAce

Réponses:

84

Vous ne pouvez accéder aux cookies que pour un site spécifique. En utilisant, document.cookievous obtiendrez une liste de paires clé = valeur échappées séparées par un point-virgule.

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

Pour simplifier l'accès, vous devez analyser la chaîne et échapper toutes les entrées:

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;
}

Vous pourriez donc écrire plus tard:

var myCookies = getCookies();
alert(myCookies.secret); // "do not tell you"
aemkei
la source
5
cela n'attrape pas l'espace après le point-virgule (";") donc les touches ont un espace à l'avant ... utilisez /; ? / lors du fractionnement pour les supprimer?
Carter Cole
Vérifiez cet extrait pour l'analyse document.cookies(du livre O'Reilly).
Bentley4
devrait vraiment ajouter .trim () à la paire [0] pour s'assurer qu'il n'y a pas d'espaces de début.
Andrew Killen
37
  1. Vous ne pouvez pas voir les cookies d'autres sites.
  2. Vous ne pouvez pas voir les HttpOnlycookies.
  3. Tous les cookies que vous pouvez voir se trouvent dans la document.cookiepropriété, qui contient une liste de paires séparées par des points - virgulesname=value .
Franci Penov
la source
27

Vous ne pouvez pas. De par sa conception, pour des raisons de sécurité, vous ne pouvez accéder qu'aux cookies définis par votre site. StackOverflow ne peut pas voir les cookies définis par UserVoice ni ceux définis par Amazon.

PhiLho
la source
5
comment Facebook a-t-il fait ça ...? J'ai toujours vu des publicités sur Facebook liées à ce que j'ai parcouru sur Google!
Ari
16
En fait, Facebook installe ses propres cookies sur chaque site ... en utilisant son bouton J'aime. Je parie que Google fait la même chose sur les boutons +1 ou même sur les scripts de statistiques du site.
PhiLho
1
merci ..., ça m'ouvre les yeux. Je pense que tout type d'application qui leur est lié fera l'affaire, y compris la connexion à l'aide de l'application de compte de réseau social.
Ari
2
@SoursopTree - N'est-ce pas AdChoices? Facebook utilise AdChoices, un service Google qui affiche du contenu en fonction de vos recherches via Google. Stackoverflow utilise également AdChoices. Je suis peut-être un peu en retard sur les détails exacts - mais je suppose que c'est à cela que vous pensez.
Rik
1
@KeepMove, nous appelons cette terminologie la synchronisation des cookies
ericdemo07
12

Pour récupérer tous les cookies du document en cours ouvert dans le navigateur, vous utilisez à nouveau la document.cookiepropriété.

Codelayer
la source
4

Approche moderne.

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

console.log(c);

;)

Prabu Samvel
la source
2

Étant donné que le titre ne spécifie pas qu'il doit être programmatique, je suppose qu'il s'agit d'un véritable problème de débogage / de gestion de la confidentialité et que la solution dépend du navigateur et nécessite un navigateur avec une gestion détaillée des cookies intégrée et / ou un module de débogage ou un plug-in / extension. Je vais en énumérer un et demander à d'autres personnes d'écrire en détail sur les navigateurs qu'ils connaissent et d'être précis avec les versions.

Chrome, construction de fer (SRWare Iron 4.0.280)

Le menu clé (outil): Options / Sous le capot / [Afficher les cookies et les autorisations du site Web] Pour les domaines / sites associés, tapez le suffixe dans la zone de recherche (comme .foo.tv). Attention: lorsque vous avez un nœud (site ou cookie) mis en surbrillance, utilisez uniquement [Supprimer] pour tuer des sous-arbres spécifiques. L'utilisation de [Supprimer tout] supprimera toujours les cookies pour tous les sites sélectionnés par la recherche et gaspillera votre session de débogage.

ZXX
la source
1

Ajout de trim () à la clé dans l'objet, et nommez-le str, il serait donc plus clair que nous avons affaire à une chaîne ici.

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

Ce que vous demandez est possible; mais cela ne fonctionnera que sur un navigateur spécifique. Vous devez développer une application d'extension de navigateur pour y parvenir. Vous pouvez en savoir plus sur l'API Chrome pour mieux comprendre. https://developer.chrome.com/extensions/cookies

Emeka Augustine
la source