如何用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
相关产品推荐
相关产品推荐

