在目录上设置cookie

时间:2011-06-17 14:21:43

标签: javascript cookies

我正在设置一个cookie以记住className更改,但是如果我设置cookie @ mydomain /它读取所有目录路径,但如果cookie设置在mydomain / sub /它只读取该目录路径。

有什么建议吗?

HTML:

<html>
  <head>
    <script type="text/javascript" src="theme.js" /></script>
  </head>
  <body id="site-index" class="defaultTheme">
    <a href="#" id="themeone">Theme one</a>
    <a href="#" id="themetwo">Theme Two</a>
  </body>
</html>

我的代码(theme.js):

var stateTheme;

window.onload=function() {

objTheme=document.getElementsByTagName('body')[0];
stateTheme=(stateTheme==null)?' defaultTheme':stateTheme;
objTheme.className+=stateTheme;

//THEME
document.getElementById('themeone').onclick=function() {
objTheme.className='defaultTheme';
stateTheme=objTheme.className;
setCookie("StateTheme",stateTheme,expiryDate);
return false;
}
document.getElementById('themetwo').onclick=function() {
objTheme.className=(objTheme.className=='defaultTheme')?' silverTheme':' silverTheme';
stateTheme=objTheme.className;
setCookie("StateTheme",stateTheme,expiryDate);
return false;
}
}

//COOKIES
function setCookie() {
exp=new Date();
plusMonth=exp.getTime()+(31*24*60*60*1000);
exp.setTime(plusMonth);
document.cookie='StateTheme='+stateTheme+';expires='+exp.toGMTString();
}

function readCookie() {
   stateTheme = getCookie("StateTheme");    
}

// Cookie
var daysToKeep = 500; // default cookie life...
theCookie = '';
today      = new Date(); 
expiryDate = new Date(today.getTime() + (daysToKeep * 86400000));

function setCookie (name,value,expires,path,theDomain,secure) { 
   value = escape(value);
   var theCookie = name + "=" + value + 
   ((expires)    ? "; expires=" + expires.toGMTString() : "") + 
   ((path)       ? "; path="    + path   : "/") +  
   ((theDomain)  ? "; domain="  + theDomain : "127.0.0.1") +    
   ((secure)     ? "; secure"            : ""); 
   document.cookie = theCookie;
} 

function getCookie(Name) { 
   var search = Name + "=" 
   if (document.cookie.length > 0) { // if there are any cookies 
      offset = document.cookie.indexOf(search) 
      if (offset != -1) { // if cookie exists 
         offset += search.length 
         // set index of beginning of value 
         end = document.cookie.indexOf(";", offset) 
         // set index of end of cookie value 
         if (end == -1) end = document.cookie.length 
         return unescape(document.cookie.substring(offset, end)) 
      } 
   }
} 

readCookie();

2 个答案:

答案 0 :(得分:0)

您可以在设置cookie时将路径专门设置为“/”,无论您在设置目录结构时有多深。

https://developer.mozilla.org/En/Document.cookie

所以在你的setCookie函数中,只需调整一下:

的document.cookie = 'StateTheme =' + stateTheme + ';到期=' + exp.toGMTString()+ '路径= /';

...或者如果您需要灵活性,可以为可以传入的函数添加路径参数。

答案 1 :(得分:0)

您有两个setCookie功能。

删除第一个

// COOKIES

function setCookie() {
exp=new Date();
plusMonth=exp.getTime()+(31*24*60*60*1000);
exp.setTime(plusMonth);
document.cookie='StateTheme='+stateTheme+';expires='+exp.toGMTString();
}

并使用

setCookie("StateTheme",stateTheme,expiryDate,"/");

我没有将其他setCookie函数添加到我的代码中 - 但是你发布的cookie代码绝对是我放在一起的代码:)