Как использовать куки для хранения недавней истории пользователей сайта (PHP)? - PullRequest
1 голос
/ 11 мая 2010

Я решил сделать недавнее окно просмотра, которое позволит пользователям видеть, по каким ссылкам они переходили ранее. Всякий раз, когда они нажимают на публикацию, ее идентификатор сохраняется в файле cookie и отображается в недавнем окне просмотра.

В моем ad.php у меня есть функция definerecentview, в которой хранится идентификатор публикации (поэтому я могу вызвать ее позже, когда пытаюсь получить информацию о публикации, такую ​​как заголовок, цена из базы данных), в 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 было установлено?

Я просто полностью потерялся в создании цикла for, который устанавливает файлы cookie. любая помощь будет оценена

Ответы [ 2 ]

3 голосов
/ 11 мая 2010

Не устанавливать несколько файлов 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 голос
/ 11 мая 2010

Вы не должны создавать один файл cookie для каждого недавнего поиска, вместо этого используйте только один файл cookie. Попробуйте следующие идеи:

  • Каждое значение в куки должно быть отделены друг от друга уникальный разделитель, вы можете использовать . , ; или |. Например: 200,201,202

  • Когда извлечение данных из куки, если он существует, используйте explode(',',CookieName);, так что вы будете в конечном итоге с массивом идентификаторов.

  • При добавлении данные к куки, которые вы можете сделать, снова explode(',',CookieName); до создать массив идентификаторов, а затем проверить, если новый идентификатор не в массиве с помощью in_array(); и затем добавьте значение в массив, используя array_push();. Затем взорвать массив с помощью implode(',',myString); и пиши myString к cookie.

Вот и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...