1

私はPHPで遊んでいて、次のことを達成しようとしています(これはサードパーティのプラグインで可能であることは知っていますが、練習として自分で構築したいと思っています):

  1. ユーザーが (Joomla 駆動の) サイト内でアクセスしたすべての URL の履歴を Cookie に保存します。
  2. ユーザーがログアウトするときに、値の配列 (URL 履歴を含むその他のユーザー情報) をソース (ファイルまたはデータベース) に送信します。項目 2 にはまだ取り組んでいませんが、回答または適切な指針をいただければ幸いです。

これまでに作成した 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'],
);

私が抱えている問題は、「ページ履歴」クッキーにあります。コンソールを使用してテストを行うと、最初の URL と常に上書きされている 2 番目の URL しか取得できないようです。

例:

URL 1 に移動: '/' //(ルート)
URL 2 に移動: '/news'
URL 3 に移動: '/tutorials'

Cookie コードの結果:

ラウンド 1 : '/'
ラウンド 2 : '/|/news' // '|' ラウンド
3 : '/|/tutorials' // '/|/news|/tutorials' の代わりに

私は何を間違っていますか?

4

1 に答える 1

0

クッキーはsetcookie関数によって作成されます。else を次のように変更し、これで問題が解決するかどうかを確認します。

else {
    $tmp = $_COOKIE['pagehistory'] . $_SERVER['REQUEST_URI'] . '|';
    setcookie('pagehistory', $tmp);
}
于 2013-05-09T19:28:20.827 に答える