2013-05-09 70 views
1

我玩用PHP,我期待实现如下(我知道这是可能与第三方插件,但我想我自己建立这个作为练习) :存储用户浏览历史中一个Cookie /会话

  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 1: '/' //(根)
导航到URL 2: '/新闻'
导航到URL 3: '/教程'

Cookie代码结果:

第1轮:'/'
第2轮:'/ |/news'//'|'作为分隔符
第3轮:'/ |/tutorials'//而不是'/ |/news |/tutorials'

我在做什么错?

回答

0

Cookie由setcookie函数创建。更改其他以下并看看是否修复它:

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

此解决方案的工作,但我对这项技术感到困惑。我的印象是'setcookie'用于创建一个具有初始值的cookie。但是,如果我的目标是在用户点击新页面时不断更新同一个cookie,那么我必须再次设置它。如果不创建两个cookie,是否会设置一个与已存在的cookie的名称相同的cookie来覆盖原始Cookie? – brooklynsweb 2013-05-09 20:02:45

+0

@brooklynsweb是的,它会覆盖,如果你指定相同的域或路径参数,在你的情况总是相同的。看看[this](http://stackoverflow.com/q/6487564/1940041) – dhavald 2013-05-09 20:25:17

+0

Jsut将先前保存的cookie保存到数据库中,然后覆盖。 – 2015-04-10 12:47:47

相关问题