【问题标题】:Cookie Expiry Date Not Set Correctly in JavascriptJavascript 中未正确设置 Cookie 到期日期
【发布时间】:2021-12-14 08:03:31
【问题描述】:

我的网站上有用于雪花的 Javascript,我在其中存储了一个 cookie,以记住用户的雪花开关设置。

我正在尝试做的是,将 cookie 设置为每年 1 月 6 日(第 12 晚之后)到期,并且雪只在每年 12 月 1 日至 1 月 5 日之间有效。

因此,我正在尝试根据用户是否在今年 12 月点击页面,将 cookie 的过期日期设置为明年或今年的 1 月 6 日(我希望以后每年都可以使用,无需编辑)或在明年 1 月 5 日之前。

我在页面中添加了警报,以在单击切换按钮后显示 expiryDate 的值,据我所知,UTC 日期结果很好,但是当我在浏览器控制台中查看到期日期时,它从我单击按钮开始始终是 1 周,因此 expiryDate 设置为 + 1 周,但未设置为明年 1 月 6 日,即使 expiryDate 的值在警报时看起来不错。

为了确定到期年份是今年还是明年,我正在检查月份值 - 如果它不为零(即一月),那么到期年份是明年,否则是今年.

function toggleSnow() {

  const dateNow = new Date();
  let year = dateNow.getYear();
  let month = dateNow.getMonth();
  var expiryYear;
  if (month == 0) {
    expiryYear = year + 1900;
  } else {
    expiryYear = year + 1901;
  }

  const dayOnExpiry = new Date("Jan 06, " + expiryYear + " 12:00:00");
  var expiryDate = dayOnExpiry.toUTCString();

  var toggleOnOff = document.getElementById("snowContainer");
  var newState = toggleOnOff.nextElementSibling;

  if (toggleOnOff.classList.toggle("active")) {
    document.cookie = "Snow=No; Expires=" + expiryDate + "; Path=/; Domain=xxx; Secure; SameSite=Strict; Priority=High";
  } else {
    document.cookie = "Snow=Yes; Expires=" + expiryDate + "; Path=/; Domain=xxx; Secure; SameSite=Strict; Priority=High";
  }
}

为什么 cookie 的到期日期总是 + 1 周而不是 1 月 6 日,或者我没有做错任何事情,而是浏览器的问题?

【问题讨论】:

  • 我只是在 Edge 而不是 Safari(Mac 用户)中尝试过,在 Edge 中,到期日期设置正确,所以有没有办法强制它到所需的日期,或者这只是浏览器具体的安全政策?
  • Jan 06, YYYY 12:00:00 不是 cookie 支持的标准日期格式之一。有关标准格式,请参阅链接的问题。
  • 链接的票证没有回答我的问题。我已经在我的代码中使用了 toUTCString 格式。
  • 您是否尝试过console.log(expiryDate) 以确保它包含您所期望的内容?
  • 是的,我得到了预期的结果。明年1月6日。给出结果 2022 年 1 月 6 日星期四 12:00:00 GMT

标签: javascript cookies


【解决方案1】:

这是由于 Safari 的智能跟踪预防。它将某些 cookie 的有效期限制为 7 天。来自What Restricts Does ITP Place on Cookies and Other Web Browser Storage?

  • 由 JavaScript 的 document.cookie 创建的第一方 cookie 将在 7 天后过期。如果在这 7 天内访问 Cookie,则其到期日期将延长 7 天。
  • 由 JavaScript 的 document.cookie 创建的第一方 cookie 由跟踪域创建,并且使用链接装饰将在 24 小时内过期。如果 Cookie 在 24 小时内被访问,则其到期日期将再延长 24 小时。

所以即使过期设置为 1 周,如果用户继续访问使用 cookie 的网站,也会自动延长。

【讨论】:

  • 谢谢。我怀疑这可能是特定于浏览器的东西。很高兴知道我正在做的事情是有效的,即使我浪费了很多时间来调试它。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
相关资源
最近更新 更多