2013-05-09 3 views
1

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

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

The 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'], 
); 

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

Пример:

нав к URL 1: '/' // (корень)
Nav к URL-адресу 2: '/ новости'
Nav к URL: 3 ''/учебники

Результаты файла cookie:

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

Что я делаю неправильно?

ответ

0

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

else { 
    $tmp = $_COOKIE['pagehistory'] . $_SERVER['REQUEST_URI'] . '|'; 
    setcookie('pagehistory', $tmp); 
} 
+0

Это решение сработало, но я смущен в отношении техники. У меня создалось впечатление, что «setcookie» используется для создания файла cookie с начальным значением. Но если моя цель - постоянно обновлять тот же файл cookie, когда пользователь нажимает на новую страницу, я должен установить его еще раз? Разве это не создаст два куки-файла, будет ли настройка cookie с тем же именем уже существующего файла cookie, который просто перезаписывает оригинал? – brooklynsweb

+0

@brooklynsweb yes, он будет перезаписан, если вы укажете те же параметры домена или пути, которые в вашем случае одинаковы всегда. Взгляните на [this] (http://stackoverflow.com/q/6487564/1940041) – dhavald

+0

Jsut сохраните ранее сохраненный файл cookie в базе данных и затем перезапишите. –

Смежные вопросы