PHP如何防止用户重复提交表单
我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦。
那么如何规避这中重复提交表单的现象出现呢?我们可以从很多方面入手:
首先从前端做限制。前端JavaScript在按钮被点击一次后禁用,即disabled,这个方法简单的防止了多次点击提交按钮,但是缺点是如果用户禁用了javascript脚本则失效。
第二,我们可以在提交后做redirect页面重定向,即提交后跳转到新的页面,主要避免F5重复提交,但是也有不足之处。
第三,就是数据库做唯一索引约束。
第四,就是做session令牌验证。
我们现在来了解下简单的利用session token来防止表单重复提交的方法。
我们在表单中加一个input隐藏域,即type="hidden",其value值用来保存token值,当页面刷新的时候这个token值会变化,提交后判断token值是否正确,如果前台提交的token与后台不匹配,则认为是重复提交。
代码如下
< ?php
/* * PHP简单利用token防止表单重复提交 */
session_start();
header("Content-Type: text/html;charset=utf-8");
function set_token() {
$_SESSION['token'] = md5(microtime(true));
}
function valid_token() {
$return = $_REQUEST['token'] === $_SESSION['token'] ? true: false;
set_token();
return $return;
}
//如果token为空则生成一个token
if(!isset($_SESSION['token']) || $_SESSION['token']=='') {
set_token();
}
if(isset($_POST['web'])){
if(!valid_token()){
echo "token error,请不要重复提交!";
}else{
echo '成功提交,Value:'.$_POST['web'];
}
}else{
?>
<form method="post" action="">
<input type="hidden" name="token" value="<?php echo $_SESSION['token']?>">
<input type="text" class="input" name="web" value="www.jb51.net">
<input type="submit" class="btn" value="提交" />
</form>
<?php
}
?>
以上是一个简单的防止重复提交表单的例子。
那么实际项目开发中,会对表单token做更复杂的处理,即我们说的令牌验证。可能要做的处理 有:验证来源域,即来路,是否为外部提交;匹配要执行的动作,是添加、修改or删除;其次最重要的是构建token,token可以采用可逆的加密算法, 尽可能复杂,因为明文还是不安全的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
yii使用activeFileField控件实现上传文件与图片的方法
这篇文章主要介绍了yii使用activeFileField控件实现上传文件与图片的方法,较为详细的分析了activeFileField控件用于文件传输的具体使用技巧,需要的朋友可以参考下2015-12-12
基于jQueryUI和Corethink实现百度的搜索提示功能
这篇文章主要介绍了基于jQueryUI和Corethink实现百度的搜索提示功能,这里是以corethink模块的形式,只需要安装上访问index.php?s=/test/index 就可以了,需要的朋友可以参考下2016-11-11
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
这篇文章主要介绍了Laravel 中创建 Zip 压缩文件并提供下载,本文通过两个任务,实例代码相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2019-04-04
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
这篇文章主要介绍了ThinkPHP中url隐藏入口文件后接收alipay传值的方法,可实现针对第三方接口的URL地址中的?进行转换处理,是非常实用的技巧,需要的朋友可以参考下2014-12-12
ThinkPHP 6 添加跳转提示扩展 liliuwei/thinkphp-jump的操作
liliuwei/thinkphp-jump 是 TP5 中经典跳转提示,在 TP6 中已经取消,通过 composer 下载该扩展可以在 TP6 中使用 TP5 的跳转提示操作,这篇文章主要介绍了ThinkPHP 6 添加跳转提示扩展 liliuwei/thinkphp-jump,需要的朋友可以参考下2023-08-08


最新评论