web-dev-qa-db-fra.com

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

Est-il possible, avec l'aide de Javascript, de lister tous les cookies associés à la page actuelle? Autrement dit, si je ne connais pas le nom des cookies mais que je veux récupérer toutes les informations qu’ils contiennent.

55
Speldosa

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 lister les cookies pour d'autres domaines pour des raisons de sécurité

70
DixonD
var x = document.cookie; 
window.alert(x);

Cela affiche chaque cookie auquel 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, les informations telles que la date d'expiration ne seront pas affichées.

9
Speldosa

(Pour le domaine, pas la page comme le souligne tur1ng)

http://snipplr.com/view/15641/list-cookies-in-javascript/

2
monojohnny

De nombreuses personnes ont déjà mentionné que document.cookie récupère tous les cookies (sauf ceux de http-only).

Je vais juste ajouter un extrait pour suivre le rythme.

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

L'extrait renverra un objet avec les noms de cookies comme clés avec les valeurs de cookies comme valeurs.

2
Jayant Bhawal

Non.

Les seuls navigateurs d'API qui vous permettent de gérer les cookies sont de les récupérer et de les définir via des paires clé-valeur. Tous les navigateurs gèrent les cookies par nom de domaine uniquement.

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

2
Yuval Adam

Non il n'y en a pas. Vous ne pouvez lire que les informations associées au domaine actuel.

1
tur1ng
function listCookies() {
    let cookies = document.cookie.split(';')
    cookies.map((cookie, n) => console.log(`${n}:`, decodeURIComponent(cookie)))
}

function findCookie(e) {
  let cookies = document.cookie.split(';')
  cookies.map((cookie, n) => cookie.includes(e) && console.log(decodeURIComponent(cookie), n))
}

Ceci est spécifiquement pour la fenêtre dans laquelle vous êtes. J'ai essayé de la garder propre et concise.

0
Fofaster

Certains cookies, tels que les URL de référence, contiennent =. En conséquence, le fait de scinder simplement = entraînera des résultats irréguliers et les réponses précédentes seront décomposées avec le temps (ou immédiatement en fonction de votre profondeur d'utilisation).

Cela ne prend que la première instance du signe égal. Il retourne un objet avec les paires valeur/clé du cookie.

// Returns an object of key value pairs for this page's cookies
function getPageCookies(){

    // cookie is a string containing a semicolon-separated list, this split puts it into an array
    var cookieArr = document.cookie.split(";");

    // This object will hold all of the key value pairs
    var cookieObj = {};

    // Iterate the array of flat cookies to get their key value pair
    for(var i = 0; i < cookieArr.length; i++){

        // Remove the standardized whitespace
        var cookieSeg = cookieArr[i].trim();

        // Index of the split between key and value
        var firstEq = cookieSeg.indexOf("=");

        // Assignments
        var name = cookieSeg.substr(0,firstEq);
        var value = cookieSeg.substr(firstEq+1);
        cookieObj[name] = value;
   }
   return cookieObj;
}
0
Travis J

Pour visualiser rapidement les cookies d'une page en particulier, je garde un raccourci "Cookies" dans la barre des favoris, avec l'URL définie sur:

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