这个是利用session来判断:
define('TIME_OUT', 30); //定义重复操作最短的允许时间,单位秒
@session_start();
$time = time();
if( isset($_SESSION['time']) )
{
if( $time - $_SESSION['time'] <= TIME_OUT ) //判断超时
{
echo '';
exit();
}
}
$_SESSION['time'] = $time;
echo "这还是正常!";
?>
你要用根据IP的话,可以把IP及访问时间存在数据库里面,在程序的开头先得到客户IP,然后再到数据库里面查询一条这个IP的最后访问记录,没有则添加,如果数据库里面保存的最后访问时间与当前时间的差值小于你规定的值,那就可以提示用户访问过于频繁。
下面给你发个获取IP的参考函数
function ClientIP()
{
$realip = "";
if (isset($_SERVER))
{
// 如果$_SERVER['HTTP_X_FORWARDED_FOR']有值表明客户端通过代理上网
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip_arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
/* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
foreach ($ip_arr as $ip)
{
$ip = trim($ip);
if ($ip != 'unknown')
{
$realip = $ip;
break;
}
}
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$realip = $_SERVER['HTTP_CLIENT_IP'];
} else {
if (isset($_SERVER['REMOTE_ADDR']))
$realip = $_SERVER['REMOTE_ADDR'];
else
$realip = '0.0.0.0';
}
} else {
if (getenv('HTTP_X_FORWARDED_FOR')) // 如果getenv('HTTP_X_FORWARDED_FOR')非空取其值作为真实IP
$realip = getenv('HTTP_X_FORWARDED_FOR');
elseif (getenv('HTTP_CLIENT_IP')) // 如果getenv('HTTP_CLIENT_IP')非空取其值作为真实IP
$realip = getenv('HTTP_CLIENT_IP');
else
$realip = getenv('REMOTE_ADDR');
}
preg_match("/[\d\.]{7,15}/", $realip, $onlineip);
$realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';
return $realip;
}