JavaScript cookie 的最长生命周期是多久?

16

Javascript持久性cookie的最大可接受过期时间值是多少?


4
我认为这是不可能的。只需选择任意一个足够长的时间来确保您的用户在该时间内已经过世...;) - Shashank Kadne
@ShashankKadne:是的,我也这么想。那可以是100年后吗?这样可以接受吗? - Jeevi
为什么不呢?将其设置为"8640000",表示100天。时间应以秒为单位。 - Shashank Kadne
@ShashankKadne 不需要那么远,末日之后的任何时间都可以。 - enchance
有人在其他地方回答了这个问题(https://dev59.com/zHA75IYBdhLWcg3wdIp0#22479460)。最大值是2^32-1,约为136年,但为了避免UNIX时间戳值的翻转,最好将其保留在2038年之前。 - miken32
3个回答

4

阅读Cookie的过期时间和最大年龄

Javascript cookies的生命周期取决于创建cookie时设置的时间。例如,以下设置了10分钟的生命周期。

expiry = new Date();   
expiry.setTime(date.getTime()+(10*60*1000)); 
// Ten minutes   
 // Date()'s toGMTSting() method will format the date correctly for a cookie   
document.cookie = "visited=yes; expires=" + expiry.toGMTString(); 

你无法设置永久cookie,即没有过期时间的cookie。


3
你好,谢谢。我的问题是,(10601000) 可以替换的最大值是多少?请为我翻译一下。 - Jeevi
我不确定,但整数最大值是最大值...我认为你可以在谷歌上搜索它。 - Pranay Rana
2
你的代码有一个错误,'expiry.setTime(date.getTime()+(10601000));' 应该改为 'expiry.setTime(expiry.getTime()+(3652460601000));'。 - Paul Nelligan
7
我很惊讶这个答案被标记为已接受,即使在当时这可能是唯一的答案,因为问题的作者明确表示它没有回答问题。在这里称人们为愚蠢是非常不合适的。人们不应该需要阅读您引用的来源才能理解您的答案。 - maurice

3

永久性Cookie:如果每次读取Cookie时都重新编写Cookie并将到期日期设置为未来某个不可思议的日期(例如10年后),则可以实现。

但是,如果网页在10年内不被访问,则假设该Cookie不是永久性的,那么这样做还有什么意义呢?您认为我们在10年后仍然会使用Cookie吗:-)

另外,Cookie的寿命只有存储它的硬件一样长。您会在10年后使用相同的硬件吗?

注意:我发现读取Cookie后立即编写相同Cookie在某些计算机上存在问题(原因未知)。解决方法是在延迟后嵌入编写Cookie:

var x=getCookie('mycookie');
setTimeout('saveCookie("mycookie", x)',1000)

在这个例子中,您需要创建getCookie和saveCookie函数,saveCookie函数将cookie生命周期设置为10年。技术的发展速度非常快,这就意味着10年对于技术来说是“永远”。

“加上一个 cookie 的寿命只有存储它的硬件一样长。你会在10年内使用同样的硬件吗?” - 我正在使用 AWS Aurora 进行存储,底层硬件并不重要,但目前预计我在10年后仍将使用 AWS Aurora。或者至少我正在工作的项目可能会(自2016年以来一直在运行 Aurora)。 - hanshenrik
抱歉晚来回复,但是是的,我们确实还在使用cookies(虽然不到10年,但我们正在努力)。 - TopchetoEU

0
使用最大的自纪元以来的毫秒数值,可以生成一个到期日期,表示Cookie保持活动的“最长可能时间”。

var key = 'foo';
var value = 'bar';
var expiryDate = new Date(8640000000000000).toUTCString();
var cookie = `${key}=${value};expires=${expiryDate}`;
console.log(cookie);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接