我有一个PHP文件,我想收集人们的IP,然后阻止PHP文件继续,如果他们的IP在过去24小时内运行该文件。我尝试过使用cookies,但它一直给我“无法更改标题”的错误。此外,人们可以清除他们的饼干。基本上,它保留了运行php文件的每个人的IP,然后如果他们试图在24小时内访问它就会“回声”你可以在24小时内再次访问它“并且不会运行整个文件。然后他们就可以了24小时后再做一次。
答案 0 :(得分:2)
每次查看页面时,请在删除超过24小时的条目后检查IP地址是否在数据库表中
// Purge records
mysql_query("DELETE FROM ip_table WHERE access_date < DATE_SUB(CURDATE(), INTERVAL 24 HOUR)");
$ip = $_SERVER['REMOTE_ADDR'];
$result = mysql_query("SELECT ip FROM ip_table WHERE ip = '$ip'");
if($result){
die("You can access this again in 24 hours");
}
else {
$result = mysql_query("INSERT INTO ip_table (ip, access_date) VALUES ('$ip', NOW())");
}
但是,这将阻止所有使用共享连接的用户。最好是要求登录,然后阻止每个用户访问。
答案 1 :(得分:1)
我认为你可以更容易地拥有一个存储每个ip的最后访问时间的表,其结构如下:
Access
- id - int
- ip_addr - int
- last_access - datetime
您从$_SERVER['SERVER_ADDR']
中的IP地址转换为inet_pton()
的整数值,并在该数据库表中进行简单的选择
答案 2 :(得分:1)
方法我可能会看到更多的工作:
<强>优点:强>
<强>缺点:强>
<强>优点:强>
<强>缺点:强>
<强>优点:强>
<强>缺点:强>
注意,$_SERVER
保存有关请求标头的IP地址和其他信息。
答案 3 :(得分:0)
您可以使用他们访问php文件的日期跟踪ip,并在24小时后尝试重新访问时更新此日期。
我希望这会有所帮助。
答案 4 :(得分:0)
这样的事情:
$_SESSION['REMOTE_ADDR'] can be stored in a database, compared against
err s/SESSION/SERVER
(rewriting session crap over here, have session on the brain)
更新: -
有用的链接
http://perishablepress.com/press/2007/07/03/how-to-block-ip-addresses-with-php/