2009-05-12 5 views
1

Possible en double:
What is the “best” way to get and set a single cookie value using JavaScriptComment gérer les cookies en JavaScript?

Je travaille sur un projet où il faut vérifier cookie et dire si elle est à 20 minutes vieux ou non. J'ai donc écrit une fois le code qui est comme ça. Ceci est seulement le code javascript que j'ai collé.

function checkcookie() 
{ 
    var difftime= getcookie(); 
    // further operation comes here 
} 

var cookieminutes; 

function getcookie() 
{ 
    var start = document.cookie.indexOf("expires"); 
    var cookiedate; 

    if(start==-1) 
    { 
     cookiedate = new Date(); 
     document.write("Start equal to -1"); 
     document.cookie="expires="+cookiedate+",path=0,domain=0"; 
     cookieminutes= cookiedate.getMinutes(); 
    } 
    else 
    { 
     document.write("Start not equal to -1"); 

     var date = new Date(); 
     var minutes = date.getMinutes(); 

     document.write("The difference is "+minutes); 
     document.write("<br />Cookie minutes is "+cookieminutes); 
     return (minutes-cookieminutes); 

    } 
} 

Dans la fonction getcookie, la variable cookieminutes apparaît comme non définie. Mais comme je le sais puisque c'est une variable globale, elle devrait avoir la valeur.

Quelqu'un peut-il dire s'il vous plaît quelle est la solution pour cela?

+0

On dirait que si getCookie est appelé pour la première fois sur une charge de page donnée, et le cookie existe, cookieminutes est jamais définie. –

Répondre

-4

Si vous souhaitez utiliser des variables globales (généralement mauvaise conception) définir et y accéder explicitement avec la fenêtre. Par exemple:

window.cookieminutes = cookiedate.getMinutes(); 

et plus tard:

document.write("Cookie minutes is "+window.cookieminutes); 

Et laisser tomber le var cookieminutes;

Comme je l'ai dit dans mon commentaire, il semble que si getCookie est appelé pour la première fois sur une page donnée load, et le cookie existe (start! = -1), cookieminutes n'est jamais défini. Vous devez vous assurer que vous n'utilisez pas de variables indéfinies.

+0

Pouvez-vous fournir un lien qui supporte ce point de vue? Je ne l'ai pas rencontré auparavant. –

+0

De quel point de vue parlez-vous? Les variables globales sont une odeur de code bien connue. –

+0

Je suppose que c'est le point de vue de l'utilisation des globals en les paramétrant/les obtenant explicitement en utilisant l'objet window (au lieu de ne pas utiliser explicitement la fenêtre). – stpe

1

Vous définissez uniquement une valeur pour cookieminutes dans la section supérieure de l'instruction if, donc toute référence dans la section else sera null.

Essayez ceci: (! Start = -1)

function getcookie() 
{ 
    var start = document.cookie.indexOf("expires"); 
    var cookiedate; 

    cookiedate = new Date(); 
    cookieminutes = cookiedate.getMinutes(); 

    if(start==-1) 
    {  
     document.write("Start equal to -1"); 
     document.cookie="expires="+cookiedate+",path=0,domain=0";  
    } 
    else 
    { 
     document.write("Start not equal to -1"); 

     var date = new Date(); 
     var minutes = date.getMinutes(); 

     document.write("The difference is "+minutes); 
     document.write("<br />Cookie minutes is "+cookieminutes); 
     return (minutes-cookieminutes); 

    } 
} 
+0

Le code Ur fonctionne ... Mais si j'utilise ce cookieminutes et minutes, les deux auront la même valeur. Je dois obtenir une différence de 20 minutes entre les 2 en raison de mon exigence de projet. Donc, vous pouvez poster une autre solution merci .. – Chaithra

+0

Je ne comprends pas la référence à 20 minutes. Comme jim0thy et moi l'avons dit, votre code original utilisait cookieminutes avant de le régler. Vous devez l'initialiser correctement, probablement en lisant le cookie. Si vous ne savez pas comment lire les cookies, consultez http://www.quirksmode.org/js/cookies.html –

+0

Ok, après avoir examiné cela un peu, il semblerait que la date d'expiration d'un cookie est en écriture seule , donc JS ne peut pas le lire. Document.cookie.indexOf ("expires") recherche un cookie NAMES "expires" et ne récupère pas la date d'expiration. Il semble que le seul moyen de contourner ce problème est de créer un deuxième cookie et de définir sa valeur à la date d'expiration du premier cookie. Désolé. – jim0thy