You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP实现点击计数器打开文件,服务端逻辑隐藏目标文件防提前访问

实现方案

核心优化点

  • 所有计数、阈值判断逻辑完全迁移至服务端,客户端仅做交互和结果渲染,不保留任何校验逻辑
  • 对目标文件test.php做访问限制,禁止用户直接通过URL访问
  • 全程不会向外暴露目标文件路径,避免用户预判

1. 修正服务端计数校验逻辑(clickcheck.php)

原有代码没有做计数累加逻辑,每次请求都会重置为1,修改后代码如下:

<?php
session_start();
// 初始化会话级点击计数器
if (!isset($_SESSION['clickcount'])) {
    $_SESSION['clickcount'] = 0;
}
// 每次合法点击请求计数+1
$_SESSION['clickcount']++;

// 未达15次阈值直接返回404
if ($_SESSION['clickcount'] < 15) {
    header('HTTP/1.1 404 Not Found');
    exit();
}

// 达到阈值后可选择销毁计数器,避免重复返回内容
unset($_SESSION['clickcount']);

// 定义标记,用于校验test.php是否为合法引入
define('IN_ACCESS', true);
// 引入目标内容文件,全程不会向客户端暴露文件路径
include("test.php");
?>

2. 限制test.php直接访问

在test.php开头添加如下代码,确保只有通过clickcheck.php引入时才会返回内容,直接访问返回404:

<?php
// 非法直接访问拦截
if (!defined('IN_ACCESS')) {
    header('HTTP/1.1 404 Not Found');
    exit();
}
// 以下是test.php原有业务代码
?>

如果你的服务器支持配置网站根目录,也可以直接把test.php放到网站根目录之外,从根源上避免被直接访问

3. 简化客户端JS逻辑

移除客户端所有阈值判断逻辑,完全根据服务端返回状态处理交互:

let accCounter = 0;
let totalCount = 0;

document.getElementById('totalCounter').innerText = totalCount;

document.getElementById('clap').onclick = function() {
    upClickCounter();
    loadDoc();
}

function upClickCounter() {
    const clickCounter = document.getElementById("clicker");
    const totalClickCounter = document.getElementById('totalCounter');
    accCounter ++;
    clickCounter.children[0].innerText = '+' + accCounter;
    totalClickCounter.innerText = totalCount + accCounter;
}

function loadDoc() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4) {
            if (this.status == 200) {
                // 服务端返回200说明达到阈值,渲染内容
                document.getElementById("view").innerHTML = this.responseText;
                document.getElementById("view").style.visibility = "visible";
                document.getElementById('overlay').style.display = 'block';
            } else {
                // 未达阈值隐藏内容
                document.getElementById("view").style.visibility = "hidden";
                document.getElementById('overlay').style.display = 'none';
            }
        }
    };
    xhttp.open("GET", "clickcheck.php", true);
    xhttp.send();
}

效果说明

调整后客户端完全无法接触到计数逻辑和阈值,也不会感知到test.php的存在,用户无法通过直接输入URL绕过点击限制。

内容的提问来源于stack exchange,提问作者CIAO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:12:04