Javascript:读取cookie

时间:2012-06-07 21:13:08

标签: javascript

我在via java脚本中看到很多很多用于读取cookie的函数,但我只想在变量中使用它一次,我是JS的新手。

这是我的代码

var TheNumber = (Math.random() + '') * 1000000000000000000;
document.cookie= "rand=" + TheNumber.toString() + ";path=/";
var AdServer = {
    tile: 1,
    mock: false,
    ord: (Math.random() + "") * 1000000000000000000 + '?',

我想用rand cookie中的值替换ord部分。

您可以指导我以下内容: 我需要一个功能吗? 如果是的话我该把它放在哪里? 我怎么称呼它?

1 个答案:

答案 0 :(得分:2)

我发现使用JavaScript编写/读取cookie的最简单(也是最灵活)方式是使用getter / setter方法的全局对象。

有关document.cookie的Mozilla dev文档页面有一个记录良好的示例:https://developer.mozilla.org/en/DOM/document.cookie

您可以如何/在何处实例化然后引用该对象取决于您的程序的其余部分,但为了简单起见,我们只是在全局命名空间中并且不担心变量冲突等:

var docCookies = {
    getItem: function (sKey) {  
      if (!sKey || !this.hasItem(sKey)) { return null; }  
      return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"), "$1")); 
    },
    setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) {  
      if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/.test(sKey)) { return; }  
      var sExpires = "";  
      if (vEnd) {  
        switch (typeof vEnd) {  
          case "number": sExpires = "; max-age=" + vEnd; break;  
          case "string": sExpires = "; expires=" + vEnd; break;  
          case "object": if (vEnd.hasOwnProperty("toGMTString")) { sExpires = "; expires=" + vEnd.toGMTString();  } break;  
        }  
      }  
      document.cookie = escape(sKey) + "=" + escape(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : "");  
    },
  hasItem: function (sKey) { return (new RegExp("(?:^|;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie); }  
}

然后设置您的cookie:

docCookies.setItem('rand', (Math.random()* 1000000000000000000).toString());

得到它:

docCookies.getItem('rand');

所以要把它们放在一起:

var docCookies = {
    getItem: function (sKey) {  
      if (!sKey || !this.hasItem(sKey)) { return null; }  
      return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"), "$1")); 
    },
    setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) {  
      if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/.test(sKey)) { return; }  
      var sExpires = "";  
      if (vEnd) {  
        switch (typeof vEnd) {  
          case "number": sExpires = "; max-age=" + vEnd; break;  
          case "string": sExpires = "; expires=" + vEnd; break;  
          case "object": if (vEnd.hasOwnProperty("toGMTString")) { sExpires = "; expires=" + vEnd.toGMTString();  } break;  
        }  
      }  
      document.cookie = escape(sKey) + "=" + escape(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : "");  
    },
  hasItem: function (sKey) { return (new RegExp("(?:^|;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie); }  
}
//set our cookie
docCookies.setItem('rand', (Math.random()* 1000000000000000000).toString());

然后在您想要检索cookie值时稍后/代码中的其他地方:

var AdServer = {
    tile: 1,
    mock: false,
    ord: docCookies.getItem('rand')
};

现在,如果您检查AdSever.ord,它将等于您之前设置的rand Cookie中的随机数。

console.log(AdServer.ord);