2011-07-01 2 views
0

je le code suivant:PHP Cookie ne fonctionne pas

if ($_COOKIE['lightbox'] != "1") { 
     setcookie("lightbox", "1", time()+3600); 
     echo(" 
     <script type='text/javascript'> 
     if (window.addEventListener) { // Mozilla, Netscape, Firefox 
      window.addEventListener('load', WindowLoad2, false); 
     } else if (window.attachEvent) { // IE 
      window.attachEvent('onload', WindowLoad2); 
     } 

     function WindowLoad2(event) { 
      displayLightbox(); 
     } 
     </script> 
     "); 

    } 

Ce que je suis en train d'accomplir essentiellement pour exécuter displayLightbox() une seule fois pour chaque utilisateur à l'aide d'un cookie. Pour une raison quelconque, je l'obtiens pour chaque page que je vais sur le site Web, sauf quand je CTRL + F5 la page. Après avoir utilisé ctrl + f5 je n'ai plus la lightbox. Des idées?

+0

Est-il possible que ce code s'exécute dans un cadre/iframe? Ou peut-être que vous obtenez ce code en utilisant ajax? Parce qu'il semble que ce code est mis en cache. – Karolis

+0

@Karolis J'implémente cela dans un système qui fait de l'optimisation de code automatiquement, je ne sais pas exactement comment et comment cette partie du code est indisponible pour moi. Est-il possible de désactiver la mise en cache pour cette partie du code ou de la contourner d'une manière ou d'une autre? –

+0

Il est difficile de dire quelque chose sans avoir de connaissances sur votre système. Mais vous pouvez essayer d'ajouter des en-têtes sans cache: http://php.net/manual/fr/function.header.php#example-3696 ou vous pouvez aussi tester l'existence d'un cookie en JavaScript. – Karolis

Répondre

1

Il semble que la première fois que votre cookie n'est pas défini, l'événement est ajouté à votre fenêtre (sauf si vous faites un CTRL + F5) et donc à chaque chargement de page, il appelle displayLightbox(). Essayez d'annuler l'événement dans la partie ELSE de votre FI.

Sinon, essayez de changer votre code JS à ceci:

if ($_COOKIE['lightbox'] != "1") { 
    setcookie("lightbox", "1", time()+3600); 
    echo(" 
     <script type='text/javascript'> 
     displayLightbox(); 
     </script> 
    "); 
} 

Hope this helps.

+0

Merci, mais je reçois le même résultat .. –

+0

@Or W: Voulez-vous dire que vous obtenez le même résultat après avoir annulé l'événement dans votre code OU après avoir essayé avec mon code? Pouvez-vous vérifier manuellement, en utilisant les paramètres du navigateur ou en utilisant le plugin FF Web Developer, si le cookie est défini? Ou peut-être pouvez-vous faire un 'print_r ($ _ COOKIE)'? – Abhay

Questions connexes