web-dev-qa-db-fra.com

Modification de la structure permalien: le cookie javascript ne fonctionne pas correctement

Mon site a besoin d'un mécanisme selon lequel un utilisateur est envoyé à la page d'accord lorsqu'il visite le site pour la première fois. Une fois qu'il accepte l'accord, il est enregistré dans le cookie . Il peut parcourir n'importe quelle page directement après cela.

J'utilise javascript pour le cookie et il fonctionnait correctement tant que le paramètre de lien permanent était par défaut un (http://mydomain.com/?p=123).

Dès que j'ai fait le changement dans permalink et que je l'ai fait postname (http://mydomain.com/sample-post/), cela a commencé à montrer un problème.

(La modification du fichier .htaccess a été effectuée conformément aux recommandations de wordpress)

Le problème est le suivant: l'utilisateur est redirigé encore et encore vers la page de l'accord même s'il clique sur le bouton de l'accord.

Voici le code.

Dans header.php

        setCookie("requested_url", document.URL, 4);
        var agreement = getCookie("agreement");

        if(agreement == "yes"){
            var requested_url = getCookie("requested_url");
        }

        else{
            window.location.assign("http://mydomain.com/?page_id=22");
        }

Dans header.php, il vérifie si le cookie nommé accord est défini sur yes. Si oui, alors ne faites rien. Si non défini à yes, redirigez vers la page d'accord (/? Page_id = 22). L'accord (cookie) est défini sur cette page .

Dans page_id=22(page-22.php)

       <script type = "text/javascript">

            function yesbutton()
                {
                    setCookie("agreement", "yes", 5);
                    window.location.assign(getCookie("requested_url"));
                }

                </script>

        <div class="agreementButton">
            <input type = "button" onclick = "yesbutton()" value = "Accept">
        </div>

Après avoir fouillé dans le code, j'ai constaté que, dans header.php, l'accès à la valeur de l'accord n'était pas correct.

Dans la page-22.php setCookie("agreement", "yes", 5); fonctionne bien. Je peux faire une alerte et obtenir sa valeur (oui) ici.

Mais lorsque je signale le même cookie dans header.php, il signale un espace vide. Dans header.php, ce code renvoie une fenêtre contextuelle vierge.

        var agreement = getCookie("agreement");
        alert(agreement);

Cela signifie clairement que le cookie (accord) défini sur yes dans page-22.php n'est pas utilisé correctement dans header.php. Mais pourquoi cela se produit je ne pouvais pas avoir la moindre idée. Étrange, c’est quand le permalien est par défaut on fonctionne très bien. Dès que permalink est défini sur postname , le cookie (accord) devient vide dans header.php.

Mise à jour: fonctions setCookie et getCookie qui existent à la fois dans header.php et page-22.php.

        function setCookie(cname, cvalue, exdays) {
            var d = new Date();
            d.setTime(d.getTime() + (exdays*24*60*60*1000));
            var expires = "expires="+d.toGMTString();
            document.cookie = cname + "=" + cvalue + "; " + expires;
        }

        function getCookie(cname) {
            var name = cname + "=";
            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);
                if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
            }
            return "";
        }

Ces deux fonctions fonctionnent bien dans les deux pages.

Le problème est:

      setCookie("agreement", "yes", 5); 

    that is done in page-22.php sets cookie correctly.

Mais quand le même cookie est accédé dans header.php avec

       var agreement = getCookie("agreement");

       the value of agreement is blank.

       alert(agreement) returns blank space.

Tous les indices/astuces sont les bienvenus.

1
Sandesh Yadav

De commentaire:

Il n'y a pas assez d'informations pour répondre à votre question. Tout votre code est javascript, pas PHP. De plus, il n'y a pas de fonction nommée "setCookie" ou "getCookie" en javascript, et vous ne précisez pas les bibliothèques que vous utilisez.

La réponse est probablement que votre fonction setCookie utilise le chemin de page actuel (les cookies ont un composant de chemin d'URL), de sorte que les autres pages sur différentes URL ne peuvent pas accéder à ces cookies, mais il n'y a aucun moyen de le savoir sans voir ce code comme bien.

Pour les problèmes JS dans ce sens, vous devriez essayer une pile différente, ce n’est pas une question spécifique à WordPress, mais un problème javascript général.

1
Otto