每24小时限制一次函数访问(PHP和MySQL)

时间:2013-10-15 10:33:40

标签: php mysql

我想根据用户的IP地址将我创建的功能的访问限制为每24小时一次。 如果超过24小时,我还希望PHP脚本删除MySQL记录。

如果用户已在24小时内使用过该功能,请向他们显示一条消息并阻止脚本继续运行。

如果用户已使用该功能但自使用该功能后已经过了24小时,请删除MySQL记录并让脚本继续运行。

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$con=mysqli_connect("domain.com.mysql","domain_com","domain_password","domain_database");
$result = mysqli_query($con,"SELECT * FROM ipblock WHERE ip='".$ip."'");
while($row = mysqli_fetch_array($result));

if($ip == $row['ip']) //and code for checking how old the record is
{
// The user has used the function within 24 hours, kill the script.
echo "Come back in 24 hours";
exit;
}
else
{
// Looks clear, let them use the function
$MyFunction = true;
}
?>

我输了,你可以看到我也遗漏了一些删除旧记录的陈述(-24小时)..

有人能为我提供一个如何做到这一点的例子吗? 感谢

2 个答案:

答案 0 :(得分:0)

我创建一个带有函数加载的表 存储IP地址和时间戳 当用户加载页面时,在运行该功能之前,选择IP地址和时间戳&lt; 24小时前。 如果您运行该功能:存储用户IP

无需删除旧记录。但是你可以将它改为验证函数:每当调用函数时,删除所有超过24小时的事件。或者设置一个每12小时运行一次的cronjob来删除所有旧的功能加载记录

基本上,您只需在数据库中创建一个时间戳字段即可。然后使用timediff()将存储的值与now()的值进行比较。

答案 1 :(得分:0)

首先将IP和访问时间作为一对存储在表中。然后检查是否很容易看出是否存在IP匹配且时间戳小于24小时的记录。

在函数运行之前,完成INSERT ... ON DUPLICATE UPDATE,并将IP地址作为表中的主键。

删除旧条目的优先级较低,您可以在方便时安排此条目并删除访问时间超过24小时的条目。

将访问时间存储为myqsl日期时间,并使用where子句进行比较:

WHERE accesstime >= DATE_SUB(NOW(), INTERVAL 1 DAY)