求PHP写一个控制同IP 5分钟内只允许提交一次信息的代码

5分钟内 打开 post.php 页面 提示 您的IP 5分钟之内只提交一次 请5分钟后再来发布信息

这个是利用session来判断:
<?php
define('TIME_OUT', 30); //定义重复操作最短的允许时间,单位秒
@session_start();
$time = time();

if( isset($_SESSION['time']) )
{
if( $time - $_SESSION['time'] <= TIME_OUT ) //判断超时
{
echo '<script type=text/javascript>alert("在30秒内只能访问一次!");</script>';
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;
}
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网