2011-06-17 2 views
0

Je configure un cookie pour mémoriser un changement className, cependant si je mets le cookie @ mydomain/il lit pour tous les chemins de répertoire, mais si le cookie est défini sur mydomain/sub/it, il lit uniquement ce chemin de répertoire.Définition de cookies sur les répertoires

Des suggestions?

Le code 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> 

Mon code (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(); 

Répondre

0

Vous disposez de deux fonctions setCookie.

Supprimer ce premier

// COOKIES

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

et utiliser

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

je ne fais pas qui a ajouté que d'autres fonctions setCookie à mon code - mais le code cookie vous avez posté est certainement celui que j'ai mis ensemble :)

+0

non doute que je l'ai trouvé ici quelque part! Je vais certainement m'assurer que je commente dans le code une reconnaissance de votre travail. Merci de votre aide! – PaulW

+0

S'il vous plaît ne vous embêtez pas avec ça La personne à remercier est Bill Dortch :) C'était juste drôle de voir ce code. Si ma réponse m'a aidé, veuillez [accepter la réponse] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – mplungjan

0

Vous pouvez définir plus précisément le chemin vers "/" lorsque vous définissez le cookie, quelle que soit la profondeur de la structure du répertoire que vous êtes lorsque vous l'avez défini.

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

Donc, dans votre fonction setCookie, juste ce tweak:

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

... ou d'ajouter un argument de chemin à la fonction que vous pouvez transmettre, si vous avez besoin de flexibilité.

Questions connexes