带有字符串的Cookie数组返回false

时间:2019-06-21 22:07:58

标签: php wordpress cookies session-cookies

我正在尝试将当前页面的URL添加到名为“ $ visitedPages”的cookie中。作为参考,Wordpress函数'get_permalink()'返回URL。

在下面,var_dump返回'false'。而如果我将第2行的“ get_permalink()”替换为“ get_the_ID()”,它返回整数页面ID,则一切正常。

我尝试从url中剥离特殊字符,但它仍然返回'false',因此我怀疑此问题与从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 :(得分:0)

尝试获取ID,并将其添加到永久链接功能中。我假设当您说使用get_the_ID()时,这意味着您将用get ID函数替换永久链接函数。尝试串联使用它们。

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

答案 1 :(得分:0)

我需要在json_decode之前使用stripslashes()从cookie中删除转义的引号。为什么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), "/");