为了简单起见,假设我在 php 中制作了一个基本的浏览量计数器,它将每个页面的计数存储在一个 mysql 表中。该表有 2 个列:PAGE_ID 和 COUNT。
我将以下代码添加到每个页面:
$query = "INSERT INTO table VALUES ('$page_id', '1')
ON duplicate KEY UPDATE COUNT=COUNT+1";
$result = mysqli_query($cxn, $query);
为了确保每个查看页面的人只在我添加 PHP 会话后触发计数器。基本上,如果您查看页面,page_id 会存储在会话中,并且计数器 php 代码会在触发计数器之前检查该会话。在我自己的测试中运行良好。
有些页面的浏览量过多,我怀疑重复,所以我开始记录 IP 和用户代理。事实证明,在大约 10% 的情况下,IP 会在几分钟内触发同一页面的计数器 2-3 次。
第一个问题 什么可能导致重复?这个问题似乎主要发生在 IE8 和 Safari 上,但我也至少有一个实例发生在 IE7 和 IE6 上。php会话有任何已知问题吗?我应该改用 cookie 吗?
第 2 部分:我修改了我的表,以便它现在存储最后一个 unix 时间戳和触发计数器的最后一个 IP。
我想修改我的查询,以便在它运行“COUNT=COUNT+1”之前检查以下内容:
If the current IP is the same as the last stored IP for this page {
check that it's been at least 5 minutes before doing COUNT=COUNT+1
} else { COUNT=COUNT+1; }
第二个问题 我如何在 mysql 查询中编写它,同时保持我的“ON duplicate KEY”语句?
我知道这个陈述不会 100% 准确,但在我弄清楚为什么会话的事情似乎不起作用之前,这会起作用。我的网站流量很低,在 5 分钟的时间内我很少在同一页面上获得超过 1 个访问者。
谢谢