如何在javascript中创建全局cookie?

时间:2012-08-08 16:12:51

标签: javascript cookies web global

我创建了一个Django网站,需要一个cookie来存储和从网站的任何部分读取。它的javascript在我需要它的每个部分,但由于某种原因,cookie本身单独存储每个页面。例如。如果cookie在一个页面上等于“set”,则可以在另一个页面上取消定义。这是我用来创建,获取和读取cookie的代码(当按下每个页面上的特定按钮时,调用“createBannerCookie()”方法) -

<script type="text/javascript">
$(document).ready(function() {
  $('#banner').hide();
  checkBannerCookie();
});

function createBannerCookie() 
{
  $('#banner').hide();
  var exdate=new Date();
  exdate.setDate(exdate.getDate() + 3);
  var c_value=escape("set") + ((exdate==null) ? "" : "; expires="+exdate.toUTCString());
  document.cookie='banner=' + c_value;
}

function getCookie(c_name)
{
  var i,x,y,ARRcookies=document.cookie.split(";");
  for (i=0;i<ARRcookies.length;i++)
  {
    x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
    y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
    x=x.replace(/^\s+|\s+$/g,"");
    if (x==c_name)
    {
      return unescape(y);
    }
  }
}

function checkBannerCookie()
{
  var banner=getCookie("banner");
  if (banner!=null && banner!="")
  {
    $('#banner').hide();
  }
  else 
  {
    $('#banner').show();
  }
}
</script>

有什么建议吗?

2 个答案:

答案 0 :(得分:9)

默认情况下,cookie只能与最初创建cookie的网页位于同一目录中的网页访问。请尝试添加“path = /”选项。 e.g。

document.cookie =
  'propertyName=test; path=/'

答案 1 :(得分:0)

西蒙

我认为您的问题是Cookie上的截止日期。它在我看来就像你设置它们在创建后过了3个毫秒。

在“createBannerCookie”功能中尝试这样的功能(而不是w3schools版本):

function createBannerCookie() 
{
  $('#banner').hide();
  var exdate=new Date();
  exdate.setTime(exdate.getTime()+(3*24*60*60*1000)); // the 3 in that math is your days
  var c_value=escape("set") + ((exdate==null) ? "" : "; expires="+exdate.toUTCString());
  document.cookie='banner=' + c_value;
}

参考:http://www.quirksmode.org/js/cookies.html