通过session如何去限制表单提交次数和时间间隙_PHP程序

 PHP与SEO   2018-09-21 10:11   71 人阅读  0 条评论

  今天我分享一下,通过session,防止用户重复提交,并可以限制每天提交的次数和数量,我已每隔60s提交一次为例,此代码可以有效防止网速慢被重复提交和用户的恶意提交,但是无法防止那些程序员的胡来哦,最好的办法就是获取对方的IP信息,然后存到数据库,进行比对和限制次数,其实原理和session方法差不多,只是各有优劣,建议大家采用数据库的方式。

  session对数据的存取,通过判断numpost的值来判断用户的提交次数,通过$timepost来限制用户的提交间隙。

  $numpost = session('numpost');

  if(empty($numpost)){

  session('numpost',3);

  session('time',time());

  }

  $timepost = session('time');

  $newstime = (time()- $timepost)%86400 % 3600 / 60 / 60;

  if($newstime < 60 && $numpost != 3){

  return $this->error('已提交,请等待60s之后提交');

  }

  if($numpost<0){

  return $this->error('已限制提交次数,请60s之后提交');

  }

  友情分享:

  用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题。我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交。

  1、js禁掉提交按钮。

  表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了

  2、使用Post/Redirect/Get模式。

  在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。

  这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。

  3、在session中存放一个特殊标志。

  在服务器端,生成一个唯一的标识符,将它存入session,同时将它写入表单的隐藏字段中,然后将表单页面发给浏览器,用户录入信息后点击提交,在服务器端,获取表单中隐藏字段的值,与session中的唯一标识符比较,相等说明是首次提交,就处理本次请求,然后将session中的唯一标识符移除;不相等说明是重复提交,就不再处理。


张新全博客
本文地址:https://www.zxq2.com/seo/171.html
版权声明:本文为原创文章,版权归 张新全博客 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?