php禁止用户重复提交表单的方法

  介绍

小编给大家分享一下php禁止用户重复提交表单的方法,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!

php禁止重复提交的实现方法:首先从前端做限制,然后在提交后做重定向页面重定向,接着在数据库中做唯一索引约束;最后进行会话令牌验证即可。

 php禁止用户重复提交表单的方法

我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦。

那么如何规避这中重复提交表单的现象出现呢?我们可以从很多方面入手:

首先从前端做限制。前端JavaScript在按钮被点击一次后禁用,即残疾,这个方法简单的防止了多次点击提交按钮,但是缺点是如果用户禁用了JavaScript脚本则失效。

第二,我们可以在提交后做重定向页面重定向,即提交后跳转到新的页面,主要避免F5重复提交,但是也有不足之处。

第三,就是数据库做唯一索引约束。

第四,就是做会话令牌验证。

我们现在来了解下简单的利用会话令牌来防止表单重复提交的方法。

我们在表单中加一个输入隐藏域,即类型=癶idden",其价值值用来保存令牌值,当页面刷新的时候这个令牌值会变化,提交后判断令牌值是否正确,如果前台提交的令牌与后台不匹配,则认为是重复提交。

& lt;php吗?/PHP简单利用令牌防止表单重复提交*/session_start ();   头(“内容类型:text/html; charset=utf-8");   函数set_token () {   $ _SESSION[& # 39;标记# 39;]=md5((真正的));   }   函数valid_token () {   美元回报=$ _REQUEST[& # 39;标记# 39;]===$ _SESSION[& # 39;标记# 39;]吗?真:假;   set_token ();   返回美元返回;   }//如果标记为空则生成一个令牌   如果(!收取($ _SESSION[& # 39;标记# 39;])| | $ _SESSION[& # 39;标记# 39;]==& # 39;& # 39;){   set_token ();   }   如果(收取($ _POST[& # 39;网络# 39;])){   如果(! valid_token ()) {   回声“令牌错误,请不要重复提交!“;   其他}{   回声& # 39;成功提交,价值:& # 39;。$ _POST[& # 39;网络# 39;];   }   其他}{   比;   }   祝辞;

以上是一个简单的防止重复提交表单的例子。

那么实际项目开发中,会对表单牌做更复杂的处理,即我们说的令牌验证。可能要做的处理有:验证来源域,即来的路,是否为外部提交;匹配要执行的动作,是添加,修改或删除;其次最重要的是构建令牌,令牌可以采用可逆的加密算法,尽可能复杂,因为明文还是不安全的。

php禁止用户重复提交表单的方法