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

PHP 利用 Cookie 實現訪問次數統計與上次訪問時間顯示

     編輯:PHP 綜合知識

核心代碼

<?php
// 初始化計數
$count = 1;

if (!isset($_COOKIE['visittime'])) {
    // 首次訪問
    setcookie('visittime', date('Y-m-d H:i:s'));
    setcookie('visitcount', 1);
    echo '歡迎你第一次訪問網站!';
} else {
    // 非首次:更新時間(有效期 60 秒示例),累加計數
    setcookie('visittime', date('Y-m-d H:i:s'), time() + 60);
    $count = $_COOKIE['visitcount'] + 1;
    setcookie('visitcount', $count);
    echo '你上次訪問網站的時間為:' . $_COOKIE['visittime'] . '
'; } echo '你第 ' . $_COOKIE['visitcount'] . ' 次訪問網站的時間為:' . date('Y-m-d H:i:s'); ?>

關鍵點解析

函數/操作說明注意事項
setcookie(name, value, expire)發送 Cookie,必須在任何輸出前調用expire 為 Unix 時間戳;0 或省略為會話級
$_COOKIE['key']讀取客戶端發送的 Cookie僅包含上一次請求發送的值,剛 setcookie 不會立即生效
date('Y-m-d H:i:s')格式化當前時間Y=四位年,m=兩位月,d=兩位日

常見問題與改進

  • 剛設定的 Cookie 當前請求不可讀:$_COOKIE 反映的是請求頭,需下一次請求才能讀到新值。代碼中直接使用 $count 變數輸出當前計數較妥當。
  • 時間格式不一致:代碼中 date("y-m-d,H:i:s") 與 date("y-m-d H:i:s") 混用,建議統一用大寫 Y(四位年)與冒號分隔。
  • 有效期過短:示例 time()+60 僅 60 秒,實際應設為天/月級(如 time()+86400*30)。
  • 並發競態:高併發下 Cookie 計數可能不準,建議結合 Session/資料庫存儲。
  • 安全性:敏感數據勿存 Cookie;可加入 httponly、secure、samesite 旗標(PHP 7.3+ setcookie 支援選項陣列)。

改進版(修正上述問題)

<?php
$visitCount = isset($_COOKIE['visitcount']) ? (int)$_COOKIE['visitcount'] : 0;
$lastVisit  = isset($_COOKIE['visittime'])  ? $_COOKIE['visittime']  : '';

$visitCount++;
$now = date('Y-m-d H:i:s');

setcookie('visitcount', $visitCount, time() + 86400 * 365, '/', '', false, true); // 1 年,httponly
setcookie('visittime', $now, time() + 86400 * 365, '/', '', false, true);

if ($visitCount === 1) {
    echo '歡迎首次訪問!';
} else {
    echo "上次訪問時間:$lastVisit
"; } echo "這是您第 $visitCount 次訪問(當前時間:$now)"; ?>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved