Javascript 通过JS设置的Cookie将在浏览器关闭时过期;过期的

Javascript 通过JS设置的Cookie将在浏览器关闭时过期;过期的,javascript,session,cookies,Javascript,Session,Cookies,在Firefox和Safari中进行测试时,我尝试了以下两行代码。每种方法都会设置cookie,但在我关闭(然后重新打开)浏览器后,这两种方法都不会使cookie过期。 浏览器的cookie信息显示“测试”将在“会话结束时”过期,但不会发生 关于这一点,也有一些类似的帖子(例如,),但没有任何帮助,也没有任何东西像我正在做的那样通过JavaScript设置cookie // fails to expire after browser closing document.cookie = "test

在Firefox和Safari中进行测试时,我尝试了以下两行代码。每种方法都会设置cookie,但在我关闭(然后重新打开)浏览器后,这两种方法都不会使cookie过期。 浏览器的cookie信息显示“测试”将在“会话结束时”过期,但不会发生

关于这一点,也有一些类似的帖子(例如,),但没有任何帮助,也没有任何东西像我正在做的那样通过JavaScript设置cookie

// fails to expire after browser closing
document.cookie = "test=1; expires=0; path=/";

// fails to expire after browser closing
document.cookie = "test=1; path=/";

expires标记希望获取UTC日期字符串。您可以使用我编写的一些简单函数:

setCookie = function(attrib, value, exp_days) {
  var dt = new Date();
  dt.setTime(dt.getTime() + (exp_days*86400000)); // Convert days to ms
  document.cookie = attrib + "=" + value + "; expires=" + dt.toUTCString(); // add attrib=value to the cookie and set an expiration date
}

getCookie = function(attrib){
  var split_cookie = document.cookie.split("; ");
  attrib+="=";
  for(var i=0; i<split_cookie.length; i++)
    if(~split_cookie[i].indexOf(attrib)) // if the attribute is somewhere in the cookie string
    // im using an ugly bitflip operator here, it could as well be an if(...!=-1)
      return split_cookie[i].substring(attrib.length + split_cookie[i].indexOf(attrib),split_cookie[i].length);
  return "";
}

removeCookie = function(attrib){
  setCookie(attrib, "", -1);
}
setCookie=function(属性、值、经验天数){
var dt=新日期();
dt.setTime(dt.getTime()+(exp_days*86400000));//将天数转换为毫秒
document.cookie=attrib+“=”+value+”;expires=“+dt.toutString();//将attrib=value添加到cookie并设置过期日期
}
getCookie=函数(attrib){
var split_cookie=document.cookie.split(“;”);
属性+=“=”;

对于(var i=0;i我没有意识到当你“关闭”时mac上的浏览器,仍有一个浏览器进程处于活动状态。您必须明确退出浏览器。一旦我退出,cookie就消失了。

这很有趣。可能是由于某些内容安全设置,例如,cookie最初设置在服务器响应头中,并且设置了“httpOnly”标志。您的服务器是否发送set-cookie headers?@lxe事实证明这很愚蠢。我没意识到当你在mac上“关闭”浏览器时,浏览器进程仍然处于活动状态。你必须明确退出浏览器。一旦我这样做了,cookie就消失了。在Chrome会话中,如果选项“继续”,cookie可能不会被删除是在浏览器设置中选择的。谢谢。遗憾的是,结果是相同的。如果我希望exp_days在浏览器关闭时过期,那么exp_days应该设置为什么?我尝试了0、1、-1并将其保留为空。至于removeCookie函数,我不想显式删除任何内容。浏览器关闭不应该自动解决问题吗“删除"对我来说?有一件事-我现在确实看到,即使在我关闭浏览器后,它们仍然让进程运行。只有在我关闭该进程后,我才发现cookie最终过期。所以,问题是-是否存在导致会话/进程持续存在的浏览器设置?更新:打开的进程是因为我在Mac上,这使它们无法运行嗯,在我关闭浏览器之后。所以,我唯一剩下的问题是,如果我想让exp_days在浏览器关闭时过期,那么exp_days到底应该设置为什么?我注意到类似31572500的数字可以工作,但为什么?如果1表示它明天过期,那么31572500不应该在以后31572500天过期,而不是在会话结束时?Cookie会被删除当其值为false(“”)或达到expires的值时。removeCookie同时执行这两项操作,因此在重新加载页面时cookie将消失(-1表示昨天,所以它将被传递。我不确定31572500为什么有效,如果它不是溢出,则可能只会导致无效日期)。如果您不确定何时需要cookie,您可以使用
让cookieValue=getCookie(“名称”)
保存该值,然后使用
removeCookie(“名称”)立即删除cookie
然后使用cookieValue执行任何您想执行的操作。一旦关闭浏览器,cookie就会消失,变量的值也会被删除。将cookie值存储在变量中并删除cookie本身意味着它的值会在任何页面重新加载时丢失,而不是在浏览器关闭时丢失。