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

Php 在Cookie/会话中存储用户导航历史记录,php,joomla2.5,httpcookie,Php,Joomla2.5,Httpcookie,我正在使用PHP,并希望实现以下目标(我知道这在第三方插件中是可能的,但我想在实践中自己构建): 将用户在我的(Joomla驱动的)站点中访问的所有URL的历史记录存储在cookie中 当用户注销时,向源(文件或数据库)发送一个值数组(其他用户信息,包括URL历史记录)。我还没有解决第二项,但如果能给我一个答案或一个好的指针,我将不胜感激 到目前为止我创建的PHP代码: $user = JFactory::getUser(); $helper = JUserHelper::getUserGr

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

  • 将用户在我的(Joomla驱动的)站点中访问的所有URL的历史记录存储在cookie中
  • 当用户注销时,向源(文件或数据库)发送一个值数组(其他用户信息,包括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,但没有更多

    例如:

    导航到URL 1:“/”/(根)
    导航到URL 2:“/news”
    导航到URL 3:“/tutorials”

    cookie代码的结果:

    第1轮:'/'
    第二轮:“/|/news”/“|”作为分隔符
    第三轮:“/|/tutorials”//而不是“/|/news |/tutorials”


    我做错了什么?

    cookies是由
    setcookie
    函数创建的。将else更改为以下,然后查看是否已修复:

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

    这个解决方案有效,但我对技术感到困惑。我的印象是“setcookie”用于创建具有初始值的cookie。但是,如果我的目标是在用户点击新页面时不断更新同一个cookie,那么我必须再次设置它吗?这不会创建两个cookie吗?设置一个与已存在的cookie同名的cookie是否会覆盖原始cookie?@brooklynseb是的,如果您指定相同的域或路径参数,它将覆盖,在您的情况下,这些参数总是相同的。看看Jsut,将先前保存的cookie保存到数据库中,然后覆盖。