web-dev-qa-db-fra.com

Lecture date d'expiration du cookie

Est-il possible de lire la date d'expiration du cookie en utilisant JavaScript?

Si oui comment? Si non, y a-t-il une source que je peux regarder?

45
DarthVader

Il n'est pas possible d'obtenir la date d'expiration d'un cookie via Javascript; seules les paires clé-valeur sont exposées via document.cookie.

50

Si vous utilisez Chrome, accédez à l'onglet "Application" (sous Outils de développement) et recherchez l'élément "Cookies" dans la barre latérale gauche. À partir de là, sélectionnez le domaine pour lequel vous vérifiez le cookie défini et une liste des cookies associés à ce domaine ainsi que leur date d'expiration apparaît.

7
skribbz14

Certains trouveront cela litigieux - mais une solution consiste à créer un autre cookie en même temps et à stocker l'heure/le tampon en parallèle, quel que soit le cookie d'origine créé. Mettez-les à jour en même temps, de manière à obtenir l'heure de votre nouveau cookie (vous pouvez également ajouter l'heure/le tampon dans votre cookie source).

La raison pour laquelle cela serait controversé est qu’au fil des années, l’idée de stocker des cookies sur un ordinateur d’utilisateur n’est pas populaire parce que vous prenez de la place. Cependant, je doute vraiment qu'un petit cookie timestamp serait trop horrible.

Il est bon de se rappeler que si le temps s’est écoulé, le navigateur ne signalera pas le cookie disponible. Le navigateur peut indiquer que le cookie est présent mais lorsque JS tente d'y accéder, il ne le pourra pas non plus.

De plus, j'ai trouvé que la barre d'outils WebDeveloper dans Firefox montre les cookies qui ont réussi mais, sous Firefox> Paramètres de confidentialité, ils sont mis à jour correctement.

2
Antony

Il y a un moyen de contourner la question d'OP… .. Je le fais comme ceci:

    **Set the cookie:**
    function setCookie(cnavn, cvaerdi, udloeb) {
      var d = new Date();

      d.setTime(d.getTime() + udloeb*24*60*60*1000 + 2*60*60*1000);
      var expires = "expires=" + d.toUTCString() + ";";
      document.cookie = cnavn + "=" + cvaerdi + "_" + d.toUTCString() + "_/;expires=" + d.toUTCString() + "path=/;";
    }

    **Display the cookies:**
    function showCookies() {
      if(document.cookie.length != 0) {
        var cookiesArray = document.cookie.split("; "),
            cString = '',
            wrapper = document.getElementById("allCookies");

        for(var i=0; i<cookiesArray.length; i++) {
            var cookieNameArray = cookiesArray[i].split("="),
                cookieValueArray = cookieNameArray[1].split("_");

            cString += "<p><b>" + (i+1) + "</b><br />Cookie name: " + cookieNameArray[0] + "<br />Cookie value: " + cookieValueArray[0] + "<br />Expires: " + cookieValueArray[1] + "<br />Path: " + cookieValueArray[2] + "</p>";
        }
        wrapper.innerHTML = cString;
      }
    }

    **HTML:**
    <p onclick="showCookies()">Show me the cookies!</p>
    <div id="allCookies"></div>
0
Dennis Munding

Si vous avez le contrôle sur le code dans lequel le cookie est défini, vous pouvez ajouter du code pour stocker la date d'expiration dans la mémoire de stockage locale du navigateur afin de la récupérer ultérieurement. Par exemple:

// set cookie with key and value to expire 30 days from now
var expires = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000);
document.cookie = [
    "key=value",
    "expires=" + expires.toUTCString()
].join("; ");

// store cookie expiration date for key in local storage
if (window.localStorage) {
    localStorage.setItem("keyExpires", expires.toISOString());
}

Vous pouvez rechercher ultérieurement lorsque le cookie expire dans la mémoire de stockage locale. Par exemple:

var expires = localStorage.getItem("keyExpires");

Le stockage local a actuellement un large support.

https://caniuse.com/#feat=namevalue-storage

0
Keith Shaw

Une autre façon de faire serait d'inscrire la date d'expiration dans le corps du cookie, puis de le relire pour d'autres réécritures. J'ai eu cela pour travailler avec la fantastique js-cookies bibliothèque.

Le réglage ressemble à ceci:

// Set cookie expiration as a number (of days)
var paywallDuration = 30;

// When you set the cookie, add the `expires` key/value pair for browsers
// Also add `expirationDate` key/value pair into JSON object
Cookies.set('article-tracker', {
  expirationDate : paywallDuration,
  totalArticlesRead: 1
}, {
  expires : paywallDuration,
  domain : 'example.com'
});

La lecture de votre cookie et la réécriture sont simples avec cette méthode. Utilisez la méthode getJSON() de js-cookie pour lire la date d'expiration que vous avez définie. Utilisez ensuite cette date deux fois lorsque vous réécrivez votre cookie - à nouveau dans l'objet JSON, puis pour le navigateur avec expires:

var existingPaywallDuration = Cookies.getJSON('article-tracker').expirationDate;

Cookies.set('article-tracker', {
  expirationDate: existingPaywallDuration,
  totalArticlesRead: 4
}, {
  expires : existingPaywallDuration,
  domain : 'example.com'
});
0
staypuftman