Массив cookie со строками возвращает false - PullRequest
1 голос
/ 22 июня 2019

Я пытаюсь добавить URL-адрес текущей страницы в файл cookie, который называется «$ seenPages». Для справки, функция Wordpress 'get_permalink ()' возвращает URL.

В приведенном ниже примере var_dump возвращает значение false. Принимая во внимание, что если я заменяю get_permalink () в строке 2 на get_the_ID (), которая возвращает целочисленные идентификаторы страницы, все это прекрасно работает.

Я попытался удалить специальные символы из URL, но он по-прежнему возвращает «ложь», поэтому я подозреваю, что эта проблема связана с декодированием строк из файла cookie.

// define the new value to add to the cookie
$currentPage = get_the_permalink(get_the_ID());

// if the cookie exists, read it and unserialize it. If not, create a blank array
if(isset($_COOKIE['visitedPages'])) {
    $visitedPagesSerialised = $_COOKIE['visitedPages'];
    $visitedPages = unserialize($visitedPagesSerialised)
    var_dump($visitedPages);
} else {
    $visitedPages = array();
}

// add the current page id to the array and serialize
$visitedPages[] = $currentPage;
$newCookieSerialized = serialize($visitedPages);

// save the cookie for 30 days
setcookie('visitedPages', $newCookieSerialized, time() + (86400 * 30), "/");
?>

Ответы [ 2 ]

0 голосов
/ 23 июня 2019

Мне нужно было удалить экранированные кавычки из cookie с помощью stripslashes () перед кодом json_decode. Почему json_decode не делает этого сам, я понятия не имею.

Вот рабочий код. Примечание: лучше использовать точно такой же код, но с json_encode () и json_decode () вместо serialize () и unserialize (), так что я тоже это изменил, но принцип тот же.

// define the new value to add to the cookie
$currentPage = get_the_permalink(get_the_ID());

// if the cookie exists, read it and unserialize it. If not, create a blank array
if(isset($_COOKIE['visitedPages'])) {
    $visitedPagesSerialised = stripslashes($_COOKIE['visitedPages']);
    $visitedPages = json_decode($visitedPagesSerialised)
    var_dump($visitedPages);
} else {
    $visitedPages = array();
}

// add the current page id to the array and serialize
$visitedPages[] = $currentPage;
$newCookieSerialized = json_encode($visitedPages);

// save the cookie for 30 days
setcookie('visitedPages', $newCookieSerialized, time() + (86400 * 30), "/");
0 голосов
/ 22 июня 2019

Попробуйте получить идентификатор и добавить его в функцию постоянной ссылки.Я предполагаю, что когда вы говорите, что использовали get_the_ID (), это означает, что вы заменяете постоянную ссылку функцией get ID.Попробуйте использовать их в тандеме.

$page_ID = get_the_ID();
$currentPage = get_the_permalink($page_ID);
...