下面的状况就会致使表单反复提交:
·点击提交按钮两次。
·点击革新按钮。
·运用浏览器退却按钮反复之前的操纵,致使反复提交表单。
·运用浏览器历史记录反复提交表单。
·浏览器反复的HTTP请求。
·网页被歹意革新。
下面是几种解决办法:
一、运用js设置按钮点击后变成灰色
<form name=form1 method=”POST” action=”/” target=_blank> <p> <input type=”text” name=”T1″ size=”20″> <input type=”button” value=”提交” οnclick=”javascript:{this.disabled=true;document.form1.submit();}”> </p> </form>
点击完按钮以后变成灰色就不能点击了,用户须要再次提交表单的话就要革新页面以后从新填写数据再提交了。
相干引荐:《php教程》
二、运用session
在session中放一个特别标志。当表单页面被请求时,生成一个特别的字符标志串,存在session中,同时放在表单的隐蔽域里。吸收处置惩罚表单数据时,搜检标识字串是不是存在,并马上从session中删除它,然后一般处置惩罚数据。
假如发明表单提交里没有有用的标志串,这说明表单已被提交过了,疏忽此次提交。
这使你的web运用有了更高等的XSRF庇护。
加载提交的页面时刻,生成一个随机数:
$code = mt_rand(0,1000000);
存储在表单的隐蔽输入框中:
< input type=”hidden” name=”code” value=””>
在吸收页面的PHP代码以下:
<?php session_start(); if(isset($_POST[‘code'])) { if($_POST[‘code'] == $_SESSION[‘code']){ // 反复提交表单了 }else{ $_SESSION[‘code'] =$_POST[‘code']; //存储code } }?>
三、运用cookies
道理和session差不多,然则cookies一旦用户浏览器禁用cookies,这功用就失效了。
if(isset($_POST[‘submit'])){ setcookie(“tempcookie”,””,time()+30); header(“Location:”.$_SERVER[PHP_SELF]);exit(); } if(isset($_COOKIE[“tempcookie”])){ setcookie(“tempcookie”,””,0);echo “您已提交过表单”; }
四、运用header函数跳转
一旦用户点击提交按钮,处置惩罚完数据后跳到其他页面。
if (isset($_POST[‘submit'])) { header(‘location:success.php');//处置惩罚数据后,转向到其他页面 }
五、运用数据库来增加束缚
直接在数据库里增加唯一束缚或建立唯一索引,一旦发明用户反复提交了,直接抛出正告或许提醒,或许只处置惩罚第一次提交的数据,这是最直接有用的要领,请求前期的数据库设想和架构要斟酌全面。
六、Post/Redirect/Get形式
在提交后实行页面重定向,这就是所谓的Post-Redirect-Get (PRG)形式。简而言之,当用户提交了表单后,你去实行一个客户端的重定向,转到提交胜利信息页面。
if (isset($_POST[‘action']) && $_POST[‘action'] == ‘submitted') { //处置惩罚数据,如插进去数据后,马上转向到其他页面 header('location:submits_success.php'); }
以上就是php怎样防止屡次提交的细致内容,更多请关注ki4网别的相干文章!