如何使用cookie存储用户最近的站点历史记录(PHP)?

时间:2010-05-11 19:03:53

标签: php cookies

我决定制作一个最近的视图框,允许用户查看他们之前点击过的链接。每当他们点击帖子时,帖子的id就会存储在cookie中并显示在最近的视图框中。

在我的ad.php中,我有一个definerecentview函数,用于存储发布的id(所以我稍后可以在尝试从cookie中获取发布的信息,如标题,价格时调用它)。如何为此创建cookie数组?

        **EXAMPLE:** user clicks on ad.php?posting_id='200'

     //this is in the ad.php
     function definerecentview()
     {

         $posting_id=$_GET['posting_id'];
         //this adds 30 days to the current time
         $Month = 2592000 + time();
         $i=1;
         if (isset($posting_id)){
                      //lost here
             for($i=1,$i< ???,$i++){             
                 setcookie("recentviewitem[$i]", $posting_id, $Month);
             }
         }
     }


     function displayrecentviews()
     {
        echo "<div class='recentviews'>";
        echo "Recent Views";
        if (isset($_COOKIE['recentviewitem'])) 
        {
            foreach ($_COOKIE['recentviewitem'] as $name => $value) 
            {
                echo "$name : $value <br />\n"; //right now just shows the posting_id
            }
        }
        echo "</div>";
     }

如何使用for循环或foreach循环来确保每当用户点击广告时,它会在Cookie中生成一个数组?所以它就像..

1. clicks on ad.php?posting_id=200 --- setcookie("recentviewitem[1]",200,$month);
2. clicks on ad.php?posting_id=201 --- setcookie("recentviewitem[2]",201,$month);
3. clicks on ad.php?posting_id=202 --- setcookie("recentviewitem[3]",202,$month);

然后在displayrecentitem函数中,我只是回显了许多cookie被设置了吗?

我完全迷失了创建一个设置cookie的for循环。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:3)

不要设置多个cookie - 设置一个包含数组(序列化)的cookie。当您追加到数组时,首先读入现有的cookie,添加数据,然后覆盖它。

// define the new value to add to the cookie
$ad_name = 'name of advert viewed';

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

// add the value to the array and serialize
$cookie[] = $ad_name;
$cookie = serialize($cookie);

// save the cookie
setcookie('recentviews', $cookie, time()+3600);

答案 1 :(得分:1)

您不应该为每个最近的搜索创建一个cookie,而只使用一个cookie。请尝试遵循以下想法:

  • Cookie中的每个值都必须为 与...分开 唯一的分隔符,您可以使用. , ;|。例如:200,201,202

  • 当 从cookie中检索数据, 如果存在,请使用 explode(',',CookieName);,所以你会 最终得到一系列ID。

  • 添加时 数据到你可以做的cookie, 再次,explode(',',CookieName);到 创建一个ID数组,然后检查是否 新ID不在数组中使用 in_array();然后添加值 使用array_push();到数组。 然后使用内爆数组 implode(',',myString);并写信 myString到Cookie。

这就是它。