存储用户浏览历史中一个Cookie /会话
问题描述:
我玩用PHP,我期待实现如下(我知道这是可能与第三方插件,但我想我自己建立这个作为练习) :存储用户浏览历史中一个Cookie /会话
- 将用户在我的(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'],
);
我遇到的问题是与 'pagehistory' 的cookie。当我使用控制台进行测试时,我似乎只得到第一个URL和第二个,但没有更多。
实施例:
导航到URL 1: '/' //(根)
导航到URL 2: '/新闻'
导航到URL 3: '/教程'
Cookie代码结果:
第1轮:'/'
第2轮:'/ |/news'//'|'作为分隔符
第3轮:'/ |/tutorials'//而不是'/ |/news |/tutorials'
我在做什么错?
答
Cookie由setcookie
函数创建。更改其他以下并看看是否修复它:
else {
$tmp = $_COOKIE['pagehistory'] . $_SERVER['REQUEST_URI'] . '|';
setcookie('pagehistory', $tmp);
}
此解决方案的工作,但我对这项技术感到困惑。我的印象是'setcookie'用于创建一个具有初始值的cookie。但是,如果我的目标是在用户点击新页面时不断更新同一个cookie,那么我必须再次设置它。如果不创建两个cookie,是否会设置一个与已存在的cookie的名称相同的cookie来覆盖原始Cookie? – brooklynsweb 2013-05-09 20:02:45
@brooklynsweb是的,它会覆盖,如果你指定相同的域或路径参数,在你的情况总是相同的。看看[this](http://stackoverflow.com/q/6487564/1940041) – dhavald 2013-05-09 20:25:17
Jsut将先前保存的cookie保存到数据库中,然后覆盖。 – 2015-04-10 12:47:47