2011-06-17 54 views
0

我设置了一个cookie来记住一个className变化,但是如果我设置了cookie @ mydomain /它读取所有目录路径,但是如果cookie设置为mydomain/sub /它只能读取该目录路径。在目录中设置Cookie

有什么建议吗?

的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(); 

回答

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函数来我的代码 - 但饼干代码你贴的绝对是我放在一起:)

+0

否怀疑我在这里找到了它!我一定会确保我在代码中对您的工作进行评论。谢谢你的帮助! – PaulW

+0

请不要打扰那个感谢的人是Bill Dortch :)看到这段代码真是太好玩了。如果我的回答有帮助,请[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – mplungjan

0

您可以专门设置的路径为 “/”,当你设置cookie,不管有多深的您设置时的目录结构。

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

因此,在你SetCookie函数,只要调整这个:

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

...或者添加一个路径参数给你可以传入的函数,如果你需要灵活性的话。