記錄用戶瀏覽過的商品,最新在前,去重,最多保留 5 條,30 天過期,存儲於 Cookie 避免服務端存儲壓力。
private function _history($data) {
if (!$data || !is_array($data)) return false;
if ($this->_request->getCookie('history')) {
$history = unserialize($this->_request->getCookie('history'));
array_unshift($history, $data); // 新增到頭部
// 去重
$rows = [];
foreach ($history as $v) {
if (in_array($v, $rows)) continue;
$rows[] = $v;
}
// 限制 5 條
while (count($rows) > 5) array_pop($rows);
setcookie('history', serialize($rows), time() + 3600*24*30, '/');
} else {
setcookie('history', serialize([$data]), time() + 3600*24*30, '/');
}
}
unserialize 還原陣列。array_unshift 將新記錄插入陣列首部。in_array 過濾重複商品(假設商品數據可直接比較)。while (count > 5) array_pop 移除最舊記錄。serialize 後寫回 Cookie,路徑 / 全站可用,有效期 30 天。$history = isset($_COOKIE['history']) ? unserialize($_COOKIE['history']) : [];
foreach ($history as $item) {
echo "<a href='{$item['url']}'>{$item['name']}</a><br>";
}
in_array($v['id'], $ids) 更高效。