求PHP写一个控制同IP 5分钟内只允许提交一次信息的代码
5分钟内打开post.php页面提示您的IP5分钟之内只提交一次请5分钟后再来发布信息...
5分钟内 打开 post.php 页面 提示 您的IP 5分钟之内只提交一次 请5分钟后再来发布信息
展开
1个回答
展开全部
这个是利用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;
}
<?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;
}
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询