首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 基於 Cookie 實現商品瀏覽歷史記錄:去重、限量、持久化存儲

     編輯:PHP 綜合知識

需求分析

記錄用戶瀏覽過的商品,最新在前,去重,最多保留 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, '/');
    }
}

邏輯解析

  1. 讀取 Cookie → unserialize 還原陣列。
  2. array_unshift 將新記錄插入陣列首部。
  3. 遍歷去重:利用 in_array 過濾重複商品(假設商品數據可直接比較)。
  4. while (count > 5) array_pop 移除最舊記錄。
  5. serialize 後寫回 Cookie,路徑 / 全站可用,有效期 30 天。

前端讀取展示

$history = isset($_COOKIE['history']) ? unserialize($_COOKIE['history']) : [];
foreach ($history as $item) {
    echo "<a href='{$item['url']}'>{$item['name']}</a><br>";
}

擴展建議

  • 用戶量大時 Cookie 體積增大影響請求性能,可改用 LocalStorage + AJAX 同步至後端。
  • 商品數據結構化(ID、名稱、圖片、價格、鏈接),便於前端直接渲染。
  • 去重邏輯可改用 ID 陣列 in_array($v['id'], $ids) 更高效。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved