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

PHP 簡易防刷新計數器實作教學

     編輯:PHP 相關知識

在開發網站時,頁面計數器是常見的功能需求。然而,若不加限制,使用者只需不斷重新整理頁面,就能人為虛增瀏覽次數。本文將示範如何使用 PHP 搭配 Session 機制,打造一個能有效防止重複計數的簡易計數器。

核心邏輯:Session 控制單一瀏覽器計數

程式的關鍵在於利用 $_SESSION['counter'] 標記該瀏覽器是否已在當前會話中計數過。當使用者首次造訪頁面時,Session 尚無此標記,程式會將資料庫中的計數值加一,並寫入 Session 標記;若同一瀏覽器再次重新整理頁面,偵測到 Session 已存在,便不再更新資料庫,達到防刷新效果。

完整程式碼範例

<?php
require_once('config.php');

function counter() {
    session_start();
    $sql = "SELECT counter FROM counter";
    $result = @mysql_query($sql);
    
    if (!empty($result)) {
        $row = mysql_fetch_array($result);
        $counter = ++$row['counter'];
        
        // 檢查 Session 是否已計數
        if (!$_SESSION['counter']) {
            $query = "UPDATE counter SET counter = $counter";
            $result = @mysql_query($query);
            if ($result) {
                $_SESSION['counter'] = true; // 設定標記,防止重複計數
            }
        }
        
        // 以圖片方式顯示數字
        $counter_len = strlen($counter);
        for ($i = 0; $i < $counter_len; $i++) {
            $number = substr($counter, $i, 1);
            if (isset($number)) {
                echo "<img src='image/{$number}.gif'>";
            }
        }
    }
}
?>

關鍵細節說明

  • 資料表結構:需預先建立 counter 資料表,包含 counter 整數欄位,初始值為 0。
  • 圖片資源:需準備 0-9 十張 GIF 圖片(命名為 0.gif ~ 9.gif),放置於 image/ 目錄下。
  • Session 生命週期:預設瀏覽器關閉即失效,符合「同一使用者單次瀏覽只計數一次」的直覺需求。

安全性與改進建議

本範例使用已棄用的 mysql_* 函式,實際部署建議改用 PDO 或 MySQLi 並採用預處理語句,防範 SQL 注入。此外,高流量網站應考慮使用 Redis 或 Memcached 等記憶體存儲替代資料庫,大幅降低 I/O 壓力。

總結

透過 Session 機制搭配資料庫儲存,即可輕鬆實作具備基本防刷功能的頁面計數器。此架構簡單易懂,適合中小型專案快速導入,亦可作為進階計數系統的基礎雛形。

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