Изменение структуры постоянных ссылок привело к неправильной работе файлов cookie javascript


Моему сайту нужен механизм, при котором пользователь отправляется на страницу соглашения, когда он посещает сайт в первый раз. Как только он примет соглашение, оно будет сохранено в файле cookie . Сразу после этого он может просматривать любую страницу.

Я использую javascript для файлов cookie, и он работал нормально, пока параметр постоянной ссылки был по умолчанию один(http://mydomain.com/?p=123).

Как только я внес изменения в постоянную ссылку и сделал ее именем сообщения (http://mydomain.com/sample-post/) это начал показывать проблему.

( Изменение в файле .htaccess было сделано в соответствии с рекомендациями wordpress)

Проблема в том, что пользователь снова и снова перенаправляется на страницу соглашения, даже если он нажимает на кнопку соглашения.

Ниже приведен код.

В 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");
        }

В header.php , он проверяет, установлено ли для файла cookie с именем соглашение значение "да". Если да, то ничего не делайте. Если не установлено значение да, то перенаправьте на страницу соглашения (/?идентификатор страницы=22). соглашение (cookie) установлено на этой странице.

В 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>

Покопавшись в коде, я обнаружил, что в header.php значение соглашения используется неправильно.

В page-22.php setCookie("agreement", "yes", 5); работает нормально. Я могу сделать оповещение и получить его значение (да) здесь.

Но когда я предупреждаю об одном и том же файле cookie в header.php, он предупреждает о пустом пространстве. В header.php этот код возвращает пустое всплывающее окно.

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

Это явно означает файл cookie (соглашение) то, что установлено в yes в page-22.php, неправильно доступно в header.php. Но почему это происходит, я не мог понять. Странно, когда постоянная ссылка по умолчанию одна, все работает нормально. Как только для постоянной ссылки будет установлено значение postname, файл cookie (соглашение) станет пустым в header.php.

Обновление: функции setCookie и getCookie, существующие в обоих header.php и 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 "";
        }

Эти две функции отлично работают на обеих страницах.

Проблема в том, что:

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

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

Но когда к одному и тому же файлу cookie обращаются в header.php с

       var agreement = getCookie("agreement");

       the value of agreement is blank.

       alert(agreement) returns blank space.

Любые подсказки/подсказки приветствуются.

Author: Sandesh Yadav, 2014-10-28

1 answers

Из комментария:

Недостаточно информации, чтобы ответить на ваш вопрос. Весь ваш код написан на javascript, а не на PHP. Кроме того, в javascript нет функции с именем "setcookie" или "getCookie", и вы не указываете, какие библиотеки используете.

Ответ, скорее всего, заключается в том, что ваша функция setCookie использует текущий путь к странице (файлы cookie содержат компонент URL-пути к ним), и, следовательно, другие страницы по другим URL-адресам не могут получить доступ к этим файлам cookie, но реального способ сказать, не видя этого кода.

Для проблем JS в этом направлении вам следует попробовать другой стек, это не конкретный вопрос WordPress, а общая проблема javascript.

 1
Author: Otto, 2014-10-30 22:30:10