Сохранение истории навигации пользователя в файле cookie/сеансе

Я играю с PHP и хочу добиться следующего (я знаю, что это возможно с помощью сторонних плагинов, но я хочу создать это самостоятельно на практике):

  1. Хранить историю всех URL-адресов, которые пользователь посещает на моем (управляемом Joomla) сайте в файле cookie.
  2. Отправка массива значений (другой информации о пользователе, включая историю URL-адресов) в источник (файл или базу данных), когда пользователь выходит из системы. Я еще не занимался вторым пунктом, но буду признателен за ответ или хороший указатель.

Код PHP, который я создал до сих пор:

$user   = JFactory::getUser();
$helper = JUserHelper::getUserGroups($user->id);

if(!isset($_COOKIE['pagehistory'])){
    setcookie('pagehistory',$_SERVER['REQUEST_URI'].'|');
}
else {
    $_COOKIE['pagehistory'] .= $_SERVER['REQUEST_URI'].'|';
}

// debug: destroy cookie
//setcookie ("pagehistory", "", time() - 3600);

$group  = "";
foreach ($helper as $value) {
    $group .= $value."|";
}

$userinfo = array(
'id'        => $user->id,
'username'  => $user->username,
'realname'  => $user->name,
'group'     => $group,
'url'       => $_SERVER['REQUEST_URI'],
'history'   => $_COOKIE['pagehistory'],
);

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

Пример:

Переход к URL 1: '/' //(root)
Переход к URL 2: '/news'
Переход к URL 3: '/tutorials'

Результаты кода cookie:

Раунд 1: '/'
Раунд 2: '/|/новости' // '|' в качестве разделителя
Раунд 3: '/|/tutorials' // вместо '/|/news|/tutorials'

Что я делаю не так?


person brooklynsweb    schedule 09.05.2013    source источник


Ответы (1)


файлы cookie создаются функцией setcookie. Измените else на следующее и посмотрите, исправит ли это:

else {
    $tmp = $_COOKIE['pagehistory'] . $_SERVER['REQUEST_URI'] . '|';
    setcookie('pagehistory', $tmp);
}
person dhavald    schedule 09.05.2013
comment
Это решение сработало, но я запутался в технике. У меня сложилось впечатление, что setcookie используется для создания файла cookie с начальным значением. Но если моя цель — постоянно обновлять тот же файл cookie, когда пользователь переходит на новую страницу, мне нужно установить его еще раз? Разве это не создаст два файла cookie, не будет ли установка файла cookie с тем же именем файла cookie, который уже существует, просто перезаписать оригинал? - person brooklynsweb; 10.05.2013
comment
@brooklynsweb да, он будет перезаписан, если вы укажете те же параметры домена или пути, которые в вашем случае всегда одинаковы. Взгляните на это - person dhavald; 10.05.2013
comment
Просто сохраните ранее сохраненный файл cookie в базе данных, а затем перезапишите. - person Mohd Sadiq; 10.04.2015