Javascript:无法在所有HTML页面中读取Cookie

Javascript: Cookie can not be read in all the HTML pages

本文关键字:读取 Cookie HTML Javascript      更新时间:2023-09-26

我从W3Schools复制并使用了getCookie和setCookie(http://www.w3schools.com/js/js_cookies.asp)。以下是获取和设置的代码:

  function setCookie(c_name,value,exdays)
  {
    var exdate=new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=c_name + "=" + c_value;
  }
  function getCookie(c_name)
  {
    var c_value = document.cookie;
    var c_start = c_value.indexOf(" " + c_name + "=");
    if (c_start == -1)
    {
      c_start = c_value.indexOf(c_name + "=");
    }
    if (c_start == -1)
    {
      c_value = null;
    }
    else
    {
      c_start = c_value.indexOf("=", c_start) + 1;
      var c_end = c_value.indexOf(";", c_start);
   if (c_end == -1)
   {
      c_end = c_value.length;
   }
      c_value = unescape(c_value.substring(c_start,c_end));
   }
      return c_value;
 }

我在prepareDriver.html页面中首次设置cookie

 setCookie("pathName",path,365);
 setCookie("formatName",ifFormat,365);

然后我在startInstall.html页面中调用了getcookie,这是一个不同的html页面

 var path = getCookie("pathName");
 var ifFormat = getCookie("formatName");

但是path和ifFormat都为null。但是,当我在prepareDriver.html中console.log时,数据就在那里。谢谢这是我第一次在JS中使用cookie。我不想使用本地存储来存储数据。因为一些旧版本的浏览器不支持这个功能,对吧?

您需要为cookie指定一个公共path。最简单的就是指定域根:

var c_value=escape(value) + "; path=/" + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());

否则,document.cookie将默认为当前location.pathname,使cookie仅可用于当前页面。

path=path(例如,'/','/mydir')如果未指定,则默认为当前文档位置的当前路径。


此外,我建议查看MDN上cookie的"小框架"。

如果您已经在使用jquery,您可能需要考虑jquery插件:

https://github.com/jquery/plugins.jquery.com

这使得它非常简单。