Изменение структуры постоянных ссылок привело к неправильной работе файлов 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.
Любые подсказки/подсказки приветствуются.
1 answers
Из комментария:
Недостаточно информации, чтобы ответить на ваш вопрос. Весь ваш код написан на javascript, а не на PHP. Кроме того, в javascript нет функции с именем "setcookie" или "getCookie", и вы не указываете, какие библиотеки используете.
Ответ, скорее всего, заключается в том, что ваша функция setCookie использует текущий путь к странице (файлы cookie содержат компонент URL-пути к ним), и, следовательно, другие страницы по другим URL-адресам не могут получить доступ к этим файлам cookie, но реального способ сказать, не видя этого кода.
Для проблем JS в этом направлении вам следует попробовать другой стек, это не конкретный вопрос WordPress, а общая проблема javascript.