103 votes

Comment puis-je lister tous les cookies de la page actuelle avec Javascript ?

Existe-t-il un moyen, à l'aide de Javascript, de lister tous les cookies associés à la page actuelle ? C'est-à-dire, si je ne connais pas les noms des cookies mais que je veux récupérer toutes les informations qu'ils contiennent.

0 votes

Veuillez préciser si par "certaine page", vous entendez "la page sur laquelle l'utilisateur se trouve actuellement". La réponse de DixonD est exacte pour les cookies de la page en cours. Tous les autres domaines sont interdits pour des raisons de sécurité.

1 votes

Oui. Je parle de la page sur laquelle l'utilisateur se trouve actuellement.

1 votes

OK. J'ai modifié le titre et la question pour refléter cela. La réponse de DixonD est appropriée ici.

119voto

DixonD Points 2637

Vous pouvez lister les cookies pour le domaine actuel :

function listCookies() {
    var theCookies = document.cookie.split(';');
    var aString = '';
    for (var i = 1 ; i <= theCookies.length; i++) {
        aString += i + ' ' + theCookies[i-1] + "\n";
    }
    return aString;
}

Mais vous ne pouvez pas répertorier les cookies d'autres domaines pour des raisons de sécurité.

1 votes

Je dois avoir été maladroit dans ma description du problème. Ce que je voulais faire était d'obtenir une liste de tous les cookies créés par tous les documents html du même catalogue. Dans le document html, j'ai simplement ajouté le code suivant : var x = document.cookie ; window.alert(x) ; ...et j'ai pu voir tous les cookies que j'avais créés. Désolé si je me suis exprimé de manière peu claire. Merci quand même pour toutes ces réponses rapides. J'aime déjà ce site :)

12 votes

Cela ne fonctionne pas non plus lorsque la valeur du cookie a été fixée. httpOnly=true .

2 votes

Plus belle sortie via aString += i + ' ' + decodeURIComponent(theCookies[i-1]) + "\n";

28voto

Jayant Bhawal Points 657

De nombreuses personnes ont déjà mentionné que document.cookie vous donne tous les cookies (sauf http-only ).

Je vais juste ajouter un petit bout pour rester dans l'air du temps.

document.cookie.split(';').reduce((cookies, cookie) => {
  const [ name, value ] = cookie.split('=').map(c => c.trim());
  cookies[name] = value;
  return cookies;
}, {});

Cet extrait renvoie un objet dont les clés sont les noms de cookies et les valeurs de cookies les valeurs.

Syntaxe légèrement différente :

document.cookie.split(';').reduce((cookies, cookie) => {
  const [ name, value ] = cookie.split('=').map(c => c.trim());
  return { ...cookies, [name]: value };
}, {});

Edit : Quelqu'un a correctement fait remarquer que vous rencontrerez des problèmes si la clé ou la valeur de votre cookie a un caractère = dans celui-ci. Vous pourriez peut-être envisager d'utiliser des séquences d'échappement pour atténuer ce problème ?

22voto

Speldosa Points 64
var x = document.cookie; 
window.alert(x);

Cela affiche tous les cookies auxquels le site actuel a accès. Si vous avez par exemple créé deux cookies "nom d'utilisateur=Frankenstein" et "nom d'utilisateur=Dracula", ces deux lignes de code afficheront "nom d'utilisateur=Frankenstein ; nom d'utilisateur=Dracula". Toutefois, des informations telles que la date d'expiration ne seront pas affichées.

2 votes

Cela ne fonctionne pas si vous avez défini le cookie avec httpOnly ce qui est recommandé, car cela permet de diminuer les conséquences négatives d'une attaque XSS.

4voto

Paul Bishop Points 41

Pour visualiser rapidement les cookies d'une page particulière, je garde un raccourci "Cookies" dans la barre de favoris dont l'URL est définie comme suit :

javascript:window.alert(document.cookie.split(';').join(';\r\n'));

2voto

Yuval Adam Points 59423

Non.

La seule API que les navigateurs vous donnent pour gérer les cookies est de les obtenir et de les définir via des paires clé-valeur. Tous les navigateurs gèrent les cookies par nom de domaine seulement.

L'accès à tous les cookies pour le domaine actuel se fait via document.cookie .

1 votes

Cela ne fonctionne pas si vous avez défini le cookie avec httpOnly, ce qui est recommandé, car cela permet de diminuer les conséquences négatives d'une attaque XSS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X