您现在的位置是:网站首页 > 心得笔记
PHP中通过session()限制同一IP多次提交
简介绝大多数网站中,都不希望同意用户同一时间段内不断的提交数据,就像我博客中的留言板块,肯定不希望同意用户不断的通过恶意的留言来刷新我的接口,这样极大的增加了我服务器的压力,这时候就需要限制下
一、场景
绝大多数网站中,都不希望同意用户同一时间段内不断的提交数据,就像我博客中的留言板块,肯定不希望同意用户不断的通过恶意的留言来刷新我的接口,这样极大的增加了我服务器的压力,这时候就需要限制下
二、方案
public function store (Request $request,Message $message) {//此处不用管,是我注入进来的Reuquest和模型 session_start();//注意:使用session之前一定要加上此行! $now = time();//获取当前时间 $timeout = 60*5;//我此处设置的限制时间是5分钟 if (isset($_SESSION['last_submit']) && $now - $_SESSION['last_submit'] <= $timeout) {//判断是否超出限制时间 $alert = ['type'=>'error','data'=>'提交太快!']; } else { $result = $message->fill($request->all())->save(); $alert = ($result) ? ['type'=>'success','data'=>'留言成功!'] : ['type'=>'error','data'=>'留言失败!']; } $_SESSION['last_submit'] = $now; //走到这里一定是该用户留言成功了,此时记录该条记录的提交时间 return redirect('/about')->with('am-alert',$alert); }
三、注意事项
用$_SESION之前必须要session_start()开启一个会话
session_start必须要在所有的输出echo前面,否则不起作用
四、补充
/** * 功能:获取当前客户端IP地址 */ public static function getIPaddress() { $IPaddress = ''; if (isset($_SERVER)) { if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) { $IPaddress = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if (isset($_SERVER["HTTP_CLIENT_IP"])) { $IPaddress = $_SERVER["HTTP_CLIENT_IP"]; } else { $IPaddress = $_SERVER["REMOTE_ADDR"]; } } else { if (getenv("HTTP_X_FORWARDED_FOR")) { $IPaddress = getenv("HTTP_X_FORWARDED_FOR"); } else if (getenv("HTTP_CLIENT_IP")) { $IPaddress = getenv("HTTP_CLIENT_IP"); } else { $IPaddress = getenv("REMOTE_ADDR"); } } return $IPaddress; }