是否有可能使用JavaScript来读取Cookie有效期?
如果是的话,怎么样? 如果没有,是否有一个源我可以看看?
是否有可能使用JavaScript来读取Cookie有效期?
如果是的话,怎么样? 如果没有,是否有一个源我可以看看?
这是不可能得到通过JavaScript一个cookie的有效期; 仅键-值对通过暴露document.cookie
。
如果您使用的是Chrome,你可以转到“应用程序”选项卡(开发人员工具内),发现在左侧边栏项目的“Cookies”。 从那里,选择要检查的设置cookie的域,它会给你与该域名相关联的,与他们的到期日期的cookie的列表。
还有一些谁就会发现这个有争议的 - 但一个解决方案是建立在同一时间的另一个cookie并存储的时间/戳在它与创建取其原饼干平行。 在同一时间更新他们两个和方式,您可以轻松地从你的新的Cookie获取时间(或者附加在源cookie中的时间/盖章)。
这将是有争议的原因是,多年来,因为你正在服用他们的空间,用户PC上存储Cookie的想法并不普遍。 不过,我真的怀疑小时间戳的cookie就太可怕。
它的值得记住的是,如果时间已经过去了那么浏览器将不报告该cookie可用。 该浏览器可以显示本Cookie,但如果JS尝试访问它 - 它不能太。
此外,我发现在Firefox WebDeveloper工具栏显示,已通过,但Firefox下>隐私设置,他们是正确更新饼干。
另一种方式做,这是写的截止日期到cookie的身体,然后从那里重读其用于后续重写。 我已经得到这与梦幻般的工作JS-饼干库。
设置如下:
// 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'
});
如果你有过在那里设置cookie的代码控制,那么你可以添加代码来存储供以后retrival浏览器的本地存储的到期日期。 例如:
// 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());
}
后来,你可以当饼干在本地存储到期查找。 例如:
var expires = localStorage.getItem("keyExpires");
本地存储目前拥有广泛的支持。
https://caniuse.com/#feat=namevalue-storage
有一个变通,以OP的问题,如果你还控制Cookie的设置。 我不喜欢这样写道:
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>