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

PHP 簡單防刷新計數器:Session 去重與圖片數字顯示

     編輯:PHP 相關知識

頁面訪問計數器需解決兩個核心問題:**去重**(同一用戶短時間重複刷新不計數)與 **顯示**(數字轉圖片防采集)。本文提供一個基於 Session + MySQL 的輕量實現。

核心代碼

<?php
require_once 'config.php'; // 包含 $pdo 或 mysql 連接

function showCounter(): void {
    session_start();

    // 1. 讀取當前計數
    $stmt = $pdo->query('SELECT counter FROM counter LIMIT 1');
    $row  = $stmt->fetch();
    $counter = (int)$row['counter'];

    // 2. Session 去重:同一會話只計數一次
    if (empty($_SESSION['counted'])) {
        $counter++;
        $pdo->prepare('UPDATE counter SET counter = ?')->execute([$counter]);
        $_SESSION['counted'] = true;
    }

    // 3. 數字轉圖片輸出(需準備 0-9.gif 放在 image/ 目錄)
    $digits = str_split((string)$counter);
    foreach ($digits as $d) {
        echo '<img src="image/' . $d . '.gif" alt="' . $d . '">';
    }
}

// 使用:在頁面模板中直接 

數據表結構

CREATE TABLE `counter` (
  `counter` BIGINT UNSIGNED NOT NULL DEFAULT 0
) ENGINE=InnoDB;
INSERT INTO `counter` VALUES (0);

進階優化方向

痛點解決方案
高併發 UPDATE 鎖爭用改用 Redis INCR 原子自增,定時持久化到 MySQL
Session 依賴 Cookie,用戶禁用 Cookie 失效結合 IP + UA 指紋、或 JWT 無狀態標識
圖片請求數 = 位數,增加 HTTP 開銷CSS Sprite 合併單圖、或 Canvas/Font 數字渲染
機器人惡意刷數接入驗證碼、速率限制、行為分析
多服務器部署計數不一致集中式存儲,或一致性哈希分片

現代替代:第三方統計

對於商業項目,建議直接接入 **Google Analytics**、**百度統計**、**Matomo (Piwik)** 或 **Umami**,獲得 PV/UV/來源/地域/設備等完整分析維度,免去自建維護成本。

簡單計數器適合個人博客、內部工具、學習練習;生產系統請用專業統計平台。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved