Установка файлов cookie в каталогах - PullRequest
0 голосов
/ 17 июня 2011

Я устанавливаю 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 голосов
/ 17 июня 2011

У вас есть две функции 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, который я определенно собрал:)

0 голосов
/ 17 июня 2011

Вы можете специально указать путь к «/», когда устанавливаете cookie, независимо от того, насколько глубоко вы находитесь в структуре каталогов, когда устанавливаете его.

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

Такв вашей функции setCookie просто настройте это:

document.cookie = 'StateTheme =' + stateTheme + '; expires =' + exp.toGMTString () + ', path = /';

... или добавьте аргумент пути к функции, которую вы можете передать, если вам нужна гибкость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...