读取cookie过期日期

时间:2009-10-07 15:00:26

标签: javascript html xhtml cookies

是否可以使用JavaScript读取Cookie过期日期?

如果是,怎么样?如果没有,是否有我可以看到的来源?

8 个答案:

答案 0 :(得分:51)

无法通过Javascript获取Cookie的到期日期;只有键值对通过document.cookie公开。

答案 1 :(得分:8)

如果您使用的是Chrome,则可以转到“应用程序”标签(在“开发者工具”中),然后在左侧边栏中找到“Cookie”项。从那里选择您正在检查设置cookie的域名,它将为您提供与该域名相关的cookie列表及其到期日期。

答案 2 :(得分:2)

有些人会发现这个有争议的 - 但一种解决方案是同时创建另一个cookie并将时间/标记存储在其中,与创建的原始cookie并行。同时更新它们,这样您就可以轻松地从新cookie中获取时间(或者在源cookie中附加时间/标记)。

这有争议的原因在于,多年来,在用户PC上存储cookie的想法并不受欢迎,因为您占用了他们的空间。但是我真的怀疑一个小的时间戳cookie太可怕了。

值得记住的是,如果时间已经过去,那么浏览器将不会报告该cookie可用。浏览器可能会显示存在的cookie,但是当JS尝试访问它时 - 它也无法访问它。

此外,我发现Firefox中的WebDeveloper工具栏显示已经过但在Firefox>下的cookie。隐私设置正确更新。

答案 3 :(得分:0)

另一种方法是将过期日期写入cookie的主体,然后从那里重新读取,以便随后重写。我已经将它与精彩的js-cookies库一起使用了。

设置如下:

// 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'
});

使用此方法读取您的cookie并重写是直截了当的。使用js-cookie的getJSON()方法来读取您设置的到期日期。然后,在重写cookie时再使用该日期两次 - 再次在JSON对象中,然后在expires的浏览器中使用:

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

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

答案 4 :(得分:0)

如果您可以控制设置cookie的代码,那么您可以添加代码以将过期日期存储在浏览器的本地存储中,以便以后进行检索。例如:

// 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());
}

稍后,您可以查找Cookie在本地存储中过期的时间。例如:

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

本地存储目前有广泛的支持。

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

答案 5 :(得分:0)

如果您还控制cookie的设置,则OP的问题可以解决。我是这样的:

function setCookie(name, value, expiryInDays) {
  const d = new Date();
  d.setTime(d.getTime() + expiryInDays * 24 * 60 * 60 * 1000);

  document.cookie = `${name}=${value}_${d.toUTCString()};expires=${d.toUTCString()}`;
}

function showCookies() {
  if (document.cookie.length !== 0) {
    const allCookies = document.cookie.split(/;\s*/);
    const wrapper = document.getElementById('allCookies');

    wrapper.innerHTML = allCookies.reduce((html, cookie, index) => {
      const cookieParts = cookie.split('=');
      const cookieValueParts = cookieParts[1].split('_');
      const cookieHtml = [
        `<b>${index + 1}</b>`,
        `Cookie name: ${cookieParts[0]}`,
        `Cookie value: ${cookieValueParts[0]}`,
        `Expires: ${cookieValueParts[1] || 'unknown'}`
      ].join('<br>');
      return html + `<p>${cookieHtml}</p>`;
    }, '');
  }
}
<button onclick="showCookies()">Show me the cookies!</button>
<div id="allCookies"></div>

答案 6 :(得分:0)

因此,如果要获取Expires/ Max Age数据的目的是检查cookie是否尚未过期,请执行一些A OR B操作。

您可以简单地检查cookie是否可用,因为过期后cookie会被删除。来自here

的信息

因此请记住:

const cookie = readCookieFunction('cookieName');
if(cookie) {
  console.log(`cookie value: ${cookie}`);
  // Do A
} else {
  console.log('cookie has expired');
  // Do B
}

答案 7 :(得分:0)

我同意@Daniel,因为他在 2009 年回答了这个问题。

但现在,我遇到了类似的问题,我找到了一种更好的方法来读取 Javascript 中 cookie 的到期日期。

cookies API 的 CookieStore 类型代表浏览器中的 cookie 存储。

您不能将其用于非 HTTPS 站点

这与所有现代浏览器兼容。

你只需要

// list of all the cookies
cookieStore.getAll().then(cookies=>console.log(cookies))

// returns object of the single cookie by NAME   
cookieStore.get('NAME_OF_THE_COOKIE').then(cookies=>console.log(cookies))

CookieStore 的输出将是 Promise,因此您需要对其进行解析。在以下格式的结果 cookie 数组之后。

domain: null
expires: 1615699665000 //TIMESTAMP
name: "STR"
path: "/"
sameSite: "STR"
secure: "BOOL"
value: "STR"

请随时纠正我或更新我的答案,以便更好地帮助他人。