我可以在会话cookie中添加最长到期日期吗?

Mar*_*cco 6 cookies

我设置了一个会话cookie,它没有任何到期日期,因此在浏览器关闭时会被删除.

现在我想添加一个最大到期日期,这意味着

  • 如果浏览器在最大到期日之前关闭,我的cookie将被删除
  • 否则我的cookie将被删除通过最大到期日期

请注意,我不想设置"常规"到期日期,因为这会使我的cookie 持久化,在浏览器在到期日之前关闭时无法删除.

我找到的唯一解决方案是拥有一个具有最大到期日期的第二个持久性cookie:如果找不到第二个cookie(过期),我手动删除我的第一个cookie.由于我想在cookie中尽可能少地写信息,我更愿意,如果有另一种方式.

@ CBroe的评论后,我补充说,cookie是在客户端生成的,我没有关联的服务器端会话,在那里存储最后一个访问时间戳

2018年更新

在对这个问题开始赏金之后,我得到了几个答案.谢谢.作为反馈,可能更好地澄清我的问题的目的,请注意我不是在寻找代码来设置持久性cookie或实现我已经拥有的解决方案(设置第二个持久性cookie).我希望得到一些其他的创意建议.目前,我可以使用Zeeshan的提示并在值中设置时间戳(我会将其附加到实际值).因此,答案是迄今为止获得赏金的最佳候选人.

小智 1

如果您想将 cookie 保留为会话 cookie,则不能设置过期时间。因此您可以将时间戳设置为 cookie 值,也可以创建新的 cookie 并将值设置为时间戳。

var timestamp = (new Date()).getTime()
document.cookie = "cookiename=value;  path=/";
document.cookie = "expirycookie="+timestamp+";  path=/";
Run Code Online (Sandbox Code Playgroud)

对于仅客户端解决方案,您可以设置时间间隔来检查 cookie 时间戳值。将以下代码添加到您的所有页面

   var interval = setInterval(function(){
         var timeStamp = getCookie('expirycookie') 
         if(!timeStamp){clearInterval(interval); return}
         var cookieDuration = 5*60*1000 //expire cookie after 5 min
         if(timeStamp < (new Date()).getTime() - cookieDuration){
           //cookie expired delete here
           document.cookie = 'cookiename=value; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
           document.cookie = 'expirycookie=value; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
          clearInterval(interval)
        }
      },1000)

function getCookie(cname) {
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for (var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') c = c.substring(1);
    if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
  }
  return "";
}
Run Code Online (Sandbox Code Playgroud)