Php避免了表单的重复提交
php中很多最常用的防止重复提交的方法是数据库限制,当然也有一些可以直接在客户端限制。具体来说,php中防止重复提交的例子有哪些?
以下情况会导致重复提交表格:
点击提交按钮两次。
单击刷新按钮。
使用浏览器的后退按钮重复前面的操作,导致表单重复提交。
使用浏览器历史记录重复提交表单。
来自浏览器的重复HTTP请求。
网页被恶意刷新。
以下是几种解决方案:
一:点击js设置按钮,会变灰。
& ltform name=form1 method=?帖子?行动=?/?target = _ blank & gt
& ltp & gt
& lt输入类型=?文字?name=?T1?尺寸=?20?& gt
& lt输入类型=?按钮?值=?提交?onclick=?JavaScript:{ this . disabled = true;document . form 1 . submit();}?& gt
& lt/p & gt;
& lt/form & gt;
点击按钮后变成灰色,无法点击。如果用户需要再次提交表单,他将在提交之前刷新页面并再次填写数据。
第二:使用会话
在会话中放置一个特殊的标志。当请求表单页面时,会生成一个特殊的字符串,它存储在会话中,并放在表单的隐藏字段中。接受处理表单数据时,检查标识字符串是否存在,立即将其从会话中删除,然后正常处理数据。
如果发现没有有效的。表单提交中的标志字符串,表示表单已经提交,本次提交被忽略。
这为您的web应用程序提供了更高级的XSRF保护。
当加载提交的页面时,会生成一个随机数。
$code = mt_rand(0,1000000);
存储在表单的隐藏输入框中:
& lt输入类型=?隐藏?name=?代码?值=?& gt
接收页面上的PHP代码如下:
& lt?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
session_start()。
if(isset($_POST[?代码?])) {
if($_POST[?代码?] == $_SESSION[?代码?]){
//反复提交表单。
}否则{
$_SESSION[?代码?] =$_POST[?代码?];//存储代码
}
}?& gt
第三:使用饼干
原理类似于session,但是cookie一旦在用户的浏览器中禁用了cookie,这个功能就失效了。
if(isset($_POST[?提交?])){
setcookie(?tempcookie?,?,时间()+30);
标题(?地点:?。$ _ SERVER[PHP _ SELF]);exit();
}
if(isset($_COOKIE[?tempcookie?])){
setcookie(?tempcookie?,?,0);回声?你已经提交了表格?;
}
第四,利用header函数跳转。
一旦用户点击提交按钮,他将在处理完数据后跳转到其他页面。
if (isset($_POST[?提交?])) {
标题(?位置:success.php?);//处理完数据后,转到其他页面。
}
五:利用数据库添加约束。
直接在数据库中添加唯一约束或创建唯一索引,一旦用户重复提交就直接抛出警告或提示,或者只处理第一次提交的数据,是最直接有效的方法,这就要求前期的数据库设计和架构要综合考虑。
六:发布/重定向/获取模式
提交后执行页面重定向,也就是所谓的Post-Redirect-Get (PRG)模式。简而言之,当用户提交表单时,您执行客户端重定向并转到提交成功信息页面。
if (isset($_POST[?行动?])& amp;& amp$_POST[?行动?] == ?已提交?) {
//处理数据,比如插入数据后立即转到其他页面。
标题(?位置:submits _ success.php?);
}
这样可以避免用户按F5导致的重复提交,也不会给出浏览器表单重复提交的警告,还可以消除根据浏览器前后按导致的相同问题。
;