IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Tester si cookie existe


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 8
    Par défaut Tester si cookie existe
    Bonjour,

    J'aurais besoin de savoir si un cookie est déjà créé, et cela depuis différentes pages de mon site.

    J'ai ce code mais il ne fonctionne pas, je ne vois pas l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script type="text/javascript">
    	if (navigator.cookieEnabled) {
    		if (document.cookie.indexOf("mycookie") == -1) {
    			le cookie n'existe pas !
    		}
    	}
    	</script>

    Quelqu'un a t-il une correction à apporter à ce code ou un code aussi simple qui fonctionne ?

    Merci par avance

  2. #2
    Membre éclairé
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Billets dans le blog
    1
    Par défaut
    Salut,

    Je sais pas si cela vient de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (document.cookie.indexOf("mycookie") == -1) {
    			le cookie n'existe pas !
    		}
    mais tu n'as pas compris la philosophie de javascript:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (document.cookie.indexOf("mycookie") == -1) {
    			alert("le cookie n'existe pas !");
    		}

  3. #3
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2009
    Messages : 447
    Par défaut
    Bonjour,
    normalement un coockie a un nom, donc on doit récuperer la valeur du coockie dans un variable, et testé si la variable est vide ou nom:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var contenucoockie=""+readCookie('nomcoockie');
    if(contenucoockie='null') {
    // coockie existe sinon n'existe pas
    }

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 8
    Par défaut
    Cela ne fonctionne pas, es-tu sûr que readCookie fonctionne bien?

  5. #5
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2009
    Messages : 447
    Par défaut
    readcoockie: fonction permet de lire un coockie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function readCookie(name) {
    	var nameEQ = name + "=";
    	var ca = document.cookie.split(';');
    	for(var i=0;i < ca.length;i++) {
    		var c = ca[i];
    		while (c.charAt(0)==' ') c = c.substring(1,c.length);
    		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    	}
    	return null;
    }
    pour créer un coockie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function createCookie(name,value,days) {
     
    	if (days) {
    		var date = new Date();
    		date.setTime(date.getTime()+(days*24*60*60*1000));
    		var expires = "; expires="+date.toGMTString();
    	}
    	else var expires = "";
    	document.cookie = name+"="+value+expires+"; path=/";
    }
    pour supprimer un coockie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function eraseCookie(name) {
    	createCookie(name,"",-1);
    }
    bonne chance

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 8
    Par défaut
    Comme indiqué dans mon premier message, il me faut quelque chose de court. Si je me permettais d'utiliser une fonction alors j'aurais déjà trouvé une solution depuis longtemps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script type="text/javascript">
    	if (navigator.cookieEnabled) {
    		if (document.cookie.indexOf("mycookie") == -1) {
    			// action 1 ...
                            // action 2 : créer le cookie mycookie
    		}
    	}
    	</script>
    Dans mon code, si mycookie n'existe pas je fais des choses puis je finis par le créer. Le problème de ce code c'est la lecture du cookie : j'ai remarqué que document.cookie.indexOf("mycookie") lis le cookie uniquement si il a été créé par cette même page. Si mycookie est créé par page1.html seul page1.html pourra le savoir ! page1.html ne pourra pas savoir si page2.html à créé le cookie. Pareil pour l'inverse.

  7. #7
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2009
    Messages : 447
    Par défaut
    Bon essaye ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(document.cookie.indexOf(cookieName+'=')!=-1){
    	//le cookie existe
    }else{
    	//à l'instar de la cuillère le cookie n'existe pas
    }
    ou ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(document.cookie == ""){
    	    //Pas de cookie
    	}
    	else{
    	   // la page  en cours possède de(s) cookie(s)
    	}

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 8
    Par défaut
    Dans ton premier code qu'est-ce que cookieName ?
    Le deuxième code indique si il y a des cookies ou pas sans préciser lesquels, donc cela ne convient pas...

  9. #9
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Les fonctions viennent d'ici : http://ppk.developpez.com/tutoriels/...javascript/#LV

    Erudix, le code de ton test dans ton premier post était bon. Si ton script te dit que le cookie mycookie n'existe pas, c'est qu'il n'existe pas. Il faut te demander si la variable mycookie contient réellement ce que tu cherches, mais aussi si le cookie a été correctement écrit, notamment avec les bons paramètres domain ou path.

    Je te conseille de lire l'article entier pour adopter une manière homogène de déclarer tes cookies sur tout ton site.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  10. #10
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 8
    Par défaut
    Pourtant il existe car il est visible dans les cookies de mon navigateurs.
    Voici le code en entier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	<script type="text/javascript">
    	if (navigator.cookieEnabled) {
    		if (document.cookie.indexOf("yes") == -1) {
    			var today = new Date(), expires = new Date();
    			expires.setTime(today.getTime() + (24*60*60*1000));
    			document.cookie = "yes" + "=" + encodeURIComponent("true") + ";expires=" + expires.toGMTString();		
    			window.location.replace('../users.html')
    			}
    		}
    	}
    	</script>
    Ce code est le même sur toutes mes pages, et quand je change de page cela recréer un cookie "yes" preuve que le code n'arrive pas à savoir si un cookie existe ou pas.
    Je vous serais infiniment reconnaissant si vous pouviez m'expliquer ce qui cloche

  11. #11
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2009
    Messages : 447
    Par défaut
    cookieName est bien le nom de votre coockie !!!!
    toi tu veux testé l'existence d'un coockie précis donc avec son nom !

  12. #12
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2009
    Messages : 447
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Les fonctions viennent d'ici : http://ppk.developpez.com/tutoriels/...javascript/#LV

    Erudix, le code de ton test dans ton premier post était bon. Si ton script te dit que le cookie mycookie n'existe pas, c'est qu'il n'existe pas. Il faut te demander si la variable mycookie contient réellement ce que tu cherches, mais aussi si le cookie a été correctement écrit, notamment avec les bons paramètres domain ou path.

    Je te conseille de lire l'article entier pour adopter une manière homogène de déclarer tes cookies sur tout ton site.
    et oui , vous voulez que j'invente les fonctions de ma téte !

  13. #13
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Je crois savoir où est le problème : quand tu fais document.cookie.indexOf("yes"), JavaScript va te trouver la première occurence de "yes" dans la chaîne de cookies, que ce soit un nom ou une valeur. Autrement dit, si tu as un cookie de n'importe quel nom dont la valeur contient "yes", indexOf renverra une valeur différente de -1.

    Donc en fait, j'ai parlé trop vite, le test du premier post n'était pas bon
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  14. #14
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 8
    Par défaut
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(document.cookie.indexOf('lecookie=')!=-1){
    }else{
    ainsi que la recommandation de Watilin en changeant la valeur et nom du cookie mais rien n'y fait, j'ai toujours plusieurs cookies identiques de créés...
    Pour info, ces cookies sont toujours les premiers avant les autres cookies donc c'est très surprenant que indexOf ne marche pas

  15. #15
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Et en essayant avec les fonctions de Peter-Paul Koch ?
    Au fait, tu testes sous quels navigateurs ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  16. #16
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 8
    Par défaut
    Il ne faut pas que j'utilise de fonction pour conserver un code propre.
    J'utilise Firefox

  17. #17
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Correction de ta phrase :
    Citation Envoyé par Erudix Voir le message
    Il ne faut pas que j'utilise des fonctions pour conserver un code propre.

    Et comme te l'a dit Watilin, la solution est de régler le path si le cookie apparait sur une page et pas une autre.

    C'est expliqué dans l'article qu'il t'a d'ailleurs donné :

    Pour créer un cookie sur ce domaine avec une paire nom / valeur valant 'ppkcookie1=testcookie' et expirant le 28 février 2010, il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.cookie = 'ppkcookie1=testcookie; expires=Sun, 28 Feb 2010 00:00:00 UTC; path=/'
    D'abord, la paire nom / valeur ('ppkcookie1=testcookie').
    Puis un point-virgule et un espace.
    La date d'expiration dans un format correct (expires=Sun, 28 Feb 2010 00:00:00 UTC).
    De nouveau un point-virgule et un espace.
    Le domaine (path=/).
    Rajoute "path=/" à la fin de ton string lors de la création du cookie.

  18. #18
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 8
    Par défaut
    Ca fonctionne, merci à tous !!

    Le code final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	<script type="text/javascript">
    	if (navigator.cookieEnabled) {
    		if (document.cookie.indexOf("yes") == -1) {
    			var today = new Date(), expires = new Date();
    			expires.setTime(today.getTime() + (24*60*60*1000));
    			document.cookie = "yes" + "=" + encodeURIComponent("true") + ";expires=" + expires.toGMTString() + ";path=/";		
    			window.location.replace('../users.html')
    			}
    		}
    	}
    	</script>

  19. #19
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Je rajouterai qqes commentaires :

    (1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(COND1){
      if(COND2){
     
      }
    }
    Si il n'y a pas d'autre traitement en dehors du "if" intérieur (pas de else ni de code à l'extérieur) alors tu peux l'écrire plus simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(COND1 && COND2){
     
    }
    (2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (navigator.cookieEnabled && document.cookie.indexOf("yes") == -1)
    En javascript, (et probablement dans d'autres langages) il est bon de prendre pour habitude de simplement tester ce que tu comptes utiliser, même si ce que tu as fais est juste, prend pour habitude de simplement tester ce que tu utilises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (document.cookie && document.cookie.indexOf("yes") == -1)
    (3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.location.replace
    La variable window est implicite pour toutes les variables de base, tu peux l'ajouter partout dans ton code, ex : window.document, window.history etc.. mais elle n'est pas nécessaire et tu peux simplement utiliser "location", "document", "history" seuls, sauf si tu les écrases en redéfinissant une variable du même nom ex "var location = ", ce qu'il ne faut surtout pas faire. Donc si tu respectes cette règle de ne pas redéfinir les variables existantes, tu peux te passer de "window" :

  20. #20
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Les espaces sont importants !
    Citation Envoyé par Erudix Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.cookie = "yes=true; expires=" + expires.toGMTString() + "; path=/";
    // ........................ ^ ici ................................ ^ et là
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester lien in/existant
    Par yveslens dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2008, 17h46
  2. Réponses: 5
    Dernier message: 22/05/2008, 14h25
  3. Tester la non existence d'un fichier
    Par Pharmacos dans le forum Débuter
    Réponses: 3
    Dernier message: 20/05/2008, 20h25
  4. Tester les cookies
    Par sperron dans le forum ASP
    Réponses: 2
    Dernier message: 21/04/2006, 16h16
  5. Tester si fenêtre existe après submit
    Par ronald dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/01/2005, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo