首页 > 解决方案 > JavaScript 函数检测会话期间设置的 cookie,但在新会话开始时检测不到预先存在的 cookie

问题描述

函数调用cookieExists('stylesheet')应该检测 cookie 的存在,如果名为 'stylesheet' 的 cookie 存在则返回 true,否则返回 false。

function cookieExists(name) {
   var ckArr = document.cookie.split(';');
   for(i = 0; i < ckArr.length; i++)
   if (ckArr[i].split('=')[0].trim() == name) return true;
   else return false;
}

此功能旨在检查所有现有 cookie 的名称,但我在一个只有一个 cookie 的页面上使用它 - 它的名称是“样式表”。我在页面加载时调用它来检查名为“样式表”的 cookie 是否存在。此 cookie 指定上次使用的 CSS 文件(用户可以选择任一样式表):样式表 1.css 或样式表 2.css。如果存在名为“样式表”的 cookie,我想使用 cookie 中指定的样式表来显示页面。

现在,如果实际上没有名为“样式表”的现有 cookie,cookieExists('stylesheet')则返回 false。如果我随后向页面添加一个名为“样式表”的 cookie,则cookieExists('stylesheet')返回 true。到目前为止,一切都很好。

但是,如果我随后关闭浏览器选项卡——虽然页面上附加了名为“样式表”的 cookie——然后在新选项卡中打开同一页面,则cookieExists('stylesheet')不再检测到 cookie 并返回 false!cookie 仍然附加到页面 - 在上一个会话结束时它还没有过期。

需要明确的是,我cookieExists('stylesheet')在 pageload 上调用window.onload = findStylesheet;,函数findStylesheet()调用的地方cookieExists('stylesheet')

function findStylesheet() {
  let savedStylesheet = cookieExists('stylesheet');
  if (savedStylesheet) {
    let setStylesheet = Cookies.get('stylesheet');
    let newStylesheet = document.getElementById("stylesheet");
    newStylesheet.setAttribute('href', setStylesheet);
   }
}

函数Cookies.get('stylesheet')就是js-cookie函数。

如果有人能指出我哪里出错了,我将不胜感激。

标签: javascriptcookies

解决方案


已解决 - 我一直在离线工作。当我将相关页面放到网上时,一切正常。所以我在那里学到了一些东西。

对我来说有趣的是 cookie 在 Firefox 下离线“工作”。我可以设置、更新和读取 cookie。我只是无法在新会话开始时读取上一个会话中存在的 cookie。但是,对于 Chrome,没有任何效果。

感谢 Alias C 的想法。


推荐阅读