是否可以使用JavaScript读取Cookie过期日期?
如果是,怎么样?如果没有,是否有我可以看到的来源?
答案 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");
本地存储目前有广泛的支持。
答案 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"
请随时纠正我或更新我的答案,以便更好地帮助他人。