在Cookie/会话中存储用户导航历史


Storing User Navigation History in a Cookie/Session

我正在玩PHP,我希望实现以下目标(我知道这是可能的第三方插件,但我想在我自己的实践中构建这个):

  1. 将用户访问我的(Joomla驱动的)站点的所有url的历史记录存储在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'],
);

我遇到的问题是'pagehistory' cookie。当我使用控制台进行测试时,我似乎只得到第一个URL和不断重写的第二个URL,但没有更多。

的例子:

导航到URL 1: '/'//(root)
导航到URL 2: '/news'
导航到URL 3: '/tutorials'

cookie代码的结果:

第一轮:'/'
第2轮:'/|/news'//'|'为分隔符
第三轮:用'/|/tutorials'//代替'/|/news|/tutorials'

我做错了什么?

cookie由setcookie函数创建。将else更改为以下内容,看看是否可以修复它:

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