我正在设置一个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();
答案 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代码绝对是我放在一起的代码:)