在PHP中基于每页设置cookie

时间:2015-10-29 09:14:08

标签: php cookies

任何人都可以告诉我为什么这不起作用:

    if (isset($_COOKIE['thisPageRated'])) {
        die();
    } else {
        $pageCookieSet = substr(get_permalink(), strlen(home_url('/'))); //use wordpress function to get the current page and then we slice off the domain
        $expire = time()+3600; //expires in a hour
        $value = 'set'; //value i'm giving the cookie
        $name = 'thisPageRated'; //name of the cookie
        setcookie($name, $value, $expire, $pageCookieSet);
        //do some stuff
    }

我想在每页的基础上设置一个Cookie,因为我试图阻止人们对页面进行一次评级。但它似乎出于某种原因为整个网站设置了它。路径正如预期的那样出现。

1 个答案:

答案 0 :(得分:0)

首先在每个页面添加一个新的cookie在我看来不是一个好主意,因为没有人喜欢溢出cookie。

其次,您可以做的是创建一个带有分隔符的页面视图列表的cookie,例如:

您的用户已使用ID 5,7和11为该页面评分。

    $pageCookieSet = substr(get_permalink(), strlen(home_url('/'))); //use wordpress         function to get the current page and then we slice off the domain
    $expire = time()+3600; //expires in a hour
    $value = '5'; //value i'm giving the cookie
    $name = 'PagesRated'; //name of the cookie
    setcookie($name, $value, $expire, $pageCookieSet);

所以我们在这里创建时注意到第5页已被评级。

之后你只需要更新这个cookie的值。

$_COOKIE['pagesRated'] = $_COOKIE['pagesRated'].'###'.$otherPageValue;

$ otherPageValue在这里是第二页的ID

在这里,我们更新了我们的cookie,现在它将返回:

5 ### 7

之后,您只需使用分隔符###

解析cookie的值
$arrayPagesRated = explode('###',$_COOKIE['pagesRated');

此行将创建一个数组,其中所有页面的ID均为:

  $arrayPagesRated[0] = 5; 
  $arrayPagesRated[1] = 7;

现在快速使用您的页面进行in_array检查哪些页面已经被评级并且可以解决这个问题