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

ThinkPHP 瀏覽歷史功能實作:Cookie 記錄與時間排序完整方案

     編輯:PHP 相關知識

ThinkPHP 瀏覽歷史功能:基於 Cookie 的用戶足跡記錄與讀取

模仿瀏覽器歷史機制,利用 Cookie 儲存用戶瀏覽過的商品/文章資訊(ID、標題、價格、縮圖、連結),按時間倒序排列,限制顯示筆數,提供優質的用戶體驗。

一、記錄瀏覽資料 (於商品/文章詳細頁執行)

// 參數:ID、標題、價格、縮圖、當前頁面 URL
cookie_history($id, $info['title'], $info['price'], $info['pic'], $thisurl);

二、核心函數庫 (function.php)

<?php
// 時間倒序排序回調
function my_sort($a, $b) {
    $a = substr($a, 1); // 移除前綴 't'
    $b = substr($b, 1);
    if ($a == $b) return 0;
    return ($a > $b) ? -1 : 1; // 較大時間戳排前面
}

// 寫入/更新歷史
function cookie_history($id, $title, $price, $img, $url) {
    $dealinfo = compact('title', 'price', 'img', 'url');
    $timeKey = 't' . NOW_TIME; // 唯一鍵名,含時間戳
    $newItem = array($timeKey => json_encode($dealinfo));

    if (!cookie('history')) {
        cookie('history', $newItem); // 初始化
    } else {
        $history = array_merge(cookie('history'), $newItem);
        uksort($history, "my_sort"); // 按時間鍵倒序
        $history = array_unique($history); // 去重(同一商品多次瀏覽保留最新)
        if (count($history) > 4) { // 限制最多 4 筆
            $history = array_slice($history, 0, 4);
        }
        cookie('history', $history);
    }
}

// 讀取歷史並解碼
function cookie_history_read() {
    $arr = cookie('history');
    $list = array();
    foreach ((array)$arr as $k => $v) {
        $list[$k] = json_decode($true);
    }
    return $list;
}

三、控制器輸出至模板

$this->assign('history', cookie_history_read());

四、模板顯示 (volist 迴圈)

<volist name="history" id="vo">
  <div class="history-item">
    <a href="{$vo.url}">
      <img src="{$vo.img}" alt="{$vo.title}" width="50" height="50" />
      <span>{$vo.title}</span>
      <em>{$vo.price}</em>
    </a>
  </div>
</volist>

關鍵設計亮點

  • 鍵名含時間戳:t{NOW_TIME} 確保唯一且可排序。
  • JSON 序列化:將多欄位打包成單一 Cookie 值,結構清晰。
  • uksort 自定義排序:按時間戳倒序,最新瀏覽優先顯示。
  • array_unique 去重:同一商品重複瀏覽只保留最新記錄。
  • 數量限制:array_slice 截取前 4 筆,避免 Cookie 膨脹。

擴展建議

  1. 改用 Session 或資料庫儲存,支援跨裝置同步歷史。
  2. 加入分類標籤,實現「最近瀏覽的書本」「最近看的手機」分組展示。
  3. 前端 AJAX 定期同步至後端,實現雲端足跡。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved