- 浏览: 1857907 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wangyudong:
Wisdom RESTClient工具地址更新了哦https: ...
前端模拟POST发送数据-Chrome下的REST Client(接口测试利器) -
wangyudong:
很多REST Client是不支持自动化测试RESTful A ...
前端模拟POST发送数据-Chrome下的REST Client(接口测试利器) -
higkoo:
一个非常棒的系统,要是能支持LDAP等开源认证就完美了。
Cynthia 是个问题管理/BUG管理/任务管理/项目管理系统。 -
寻光之旅:
标签库使用有啥好处呢?
thinkphp 使用标签库的步骤 -
lgdjy123:
Android:TextView属性大全
用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题。我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交。
1.使用客户端脚本
提到客户端脚本,经常使用的是JavaScript进行常规输入验证。在下面的例子中,我们使用它处理表单的重复提交问题,请看下面的代码:
<form method=”post” name=”register” action=”test.php” enctype=”multipart/form-data”>
<input name=”text” type=”text” id=”text” />
<input name=”cont” value=”提交” type=”button” onClick=”document.register.cont.value=’正在提交,请等待…’;document.register.cont.disabled=true;document.the_form.submit();”>
</form>
当用户单击“提交”按钮后,该按钮将变为灰色不可用状态,如图5-6所示。
上面的例子中使用OnClick事件检测用户的提交状态,如果单击了“提交”按钮,该按钮立即置为失效状态,用户不能单击按钮再次提交。
还有一个方法,也是利用JavaScript的功能,但是使用的是OnSubmit()方法,如果已经提交过一次表单,将立即弹出对话框,代码如下:
<script language=”javascript”>
<!–
var submitcount=0;
function submitOnce (form){
if (submitcount == 0){
submitcount++;
return true;
} else{
alert(“正在操作,请不要重复提交,谢谢!”);
return false;
}
}
//–>
</script>
<form name=”the_form” method=”post” action=”" onSubmit=”return submitOnce(this)”>
<input name=”text” type=”text” id=”text” />
<input name=”cont” value=”提交” type=”submit”>
</form>
在上例中,如果用户已经单击“提交”按钮,该脚本会自动记录当前的状态,并将submitcount变量自加1,当用户试图再次提交时,脚本判断submitcount变量值非零,提示用户已经提交,从而避免重复提交表单。
2.使用Cookie处理
使用Cookie记录表单提交的状态,根据其状态可以检查是否已经提交表单,请见下面的代码:
<?php
if(isset($_POST['go'])){
setcookie(“tempcookie”,”",time()+30);
header(“Location:”.$_SERVER[PHP_SELF]);
exit();
}
if(isset($_COOKIE["tempcookie"])){
setcookie(“tempcookie”,”",0);
echo “您已经提交过表单”;
}
?>
如果客户端禁止了Cookie,该方法将不起任何作用,这点请注意。关于Cookie的详细介绍,请参阅第10章“PHP会话管理”。
3.使用Session处理
利用PHP的Session功能,也能避免重复提交表单。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交,请见如下代码:
<?php
session_start();
//根据当前SESSION生成随机数
$code = mt_rand(0,1000000);
$_SESSION['code'] = $code;
?>
在页面表单上将随机数作为隐藏值进行传递,代码如下:
<input type=”hidden” name=”originator” value=”<?=$code?>”>
在接收页面的PHP代码如下:
<?php
session_start();
if(isset($_POST['originator'])) {
if($_POST['originator'] == $_SESSION['code']){
// 处理该表单的语句,省略
}else{
echo ‘请不要刷新本页面或重复提交表单!’;
}
}
?>
4.使用header函数转向
除了上面的方法之外,还有一个更简单的方法,那就是当用户提交表单,服务器端处理后立即转向其他的页面,代码如下所示。
if (isset($_POST['action']) && $_POST['action'] == ‘submitted’) {
//处理数据,如插入数据后,立即转向到其他页面
header(‘location:submits_success.php’);
}
这样,即使用户使用刷新键,也不会导致表单的重复提交,因为已经转向新的页面,而这个页面脚本已经不理会任何提交的数据了。
5.表单过期的处理
在开发过程中,经常会出现表单出错而返回页面的时候填写的信息全部丢失的情况,为了支持页面回跳,可以通过以下两种方法实现。
5.1 使用header头设置缓存控制头Cache-control。
header(‘Cache-control: private, must-revalidate’); //支持页面回跳
5.2 使用session_cache_limiter方法。
session_cache_limiter(‘private, must-revalidate’); //要写在session_start方法之前
下面的代码片断可以防止用户填写表单的时候,单击“提交”按钮返回时,刚刚在表单上填写的内容不会被清除:
session_cache_limiter(‘nocache’);
session_cache_limiter(‘private’);
session_cache_limiter(‘public’);
session_start();
//以下是表单内容,这样在用户返回该表单时,已经填写的内容不会被清空
将该段代码贴到所要应用的脚本顶部即可。
Cache-Control消息头域说明
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。
请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh和only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate和max-age。各个消息中的指令含义如下表所示:
缓存指令
说 明
public
指示响应可被任何缓存区缓存
private
指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效
no-cache
指示请求或响应消息不能缓存
no-store
用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存
max-age
指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应
min-fresh
指示客户机可以接收响应时间小于当前时间加上指定时间的响应
max-stale
指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息
有关Session和Cookie的介绍,详细内容请参阅第10章“PHP会话管理”。
判断表单动作的技巧
表单可以通过同一个程序来分配应该要处理的动作,在表单中有不同的逻辑,要怎么判别使用者按下的按钮内容不过是个小问题。
其实只要通过提交按钮的name 就可以知道了,表单在提交出去的时候,只有按下的submit类型的按钮才会被送到表单数组去,所以只要判断按钮的值就可以知道使用者按下哪一个按钮,以如下表单为例:
<FORM method=”POST” Action=test.php>
<input type=submit name=”btn” value=”a”>
<input type=submit name=”btn” value=”b”>
</FORM>
当使用者按下“a”按钮的时候btn=a,按下“b”按钮,则btn=b。
另外也可以通过提交按钮的名字(name)来判断,请见如下代码:
<FORM method=”POST” Action=test.php>
<input type=submit name=”a” value=”提交A”>
<input type=submit name=”b” value=”提交B”>
</FORM>
这样只要POST/GET的参数里面有a或b,就可以知道按下的按钮是哪个。
<?php
print_r($_POST);
?>
发表评论
-
Lumen写事件
2018-02-10 10:46 6971.在事件里面定义事件 <?php /** * ... -
PHP设计模式之状态机模式-实现业务流控制
2018-01-28 11:16 1708应用场景:在我们日常开发中经常会遇到各种状态的切换,例如电 ... -
装wampserver时显示计算机丢失MSVCR110.dll
2017-03-07 10:15 1108http://www.microsoft.com/zh-CN ... -
phpdocument的使用
2016-10-25 16:24 522官网: https://www.phpdoc.org/ ... -
微信调试方法
2016-05-24 09:25 7331. 在本地搭建类似LAMP的环境(或者WAMP)都行,目的 ... -
创建自己的composer包
2015-12-10 17:01 941创建一个composer/packagist包 在g ... -
微信nickname乱码及mysql编码格式设置(utf8mb4)
2015-12-08 12:24 1668将数据库的编码设置为utf8mb4_general_ci ... -
docker php 配置
2015-10-28 18:10 1067FROM php:5.6-fpm MAINTAINER S ... -
四种数据存储结构---顺序存储 链接存储 索引存储 散列存储
2015-08-15 21:54 1476存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储。 ... -
分享PHP代码检查经验
2015-08-09 23:03 1552问: 团队十多人开发, 如何保证代码规范统一? http ... -
php过滤只匹配中英文字符串
2015-08-04 15:26 1857<?php $str = "php $ ... -
移除emoji内容
2015-08-04 14:52 1196public static function removeE ... -
php 敏感词过滤高级版
2015-08-04 10:20 1447前面介绍过一个过滤了 ... -
php过滤广告内容(兼职,QQ号,淘宝兼职,网址)
2015-08-04 10:17 1180如果你网站有评论那么你肯定会发现你网站经常会被一人注入广告了 ... -
写第一个PHP扩展, 实现计算数组的个数
2015-07-20 19:09 1298需求: 写第一个PHP扩展, 里面包含一个函数叫 maxw ... -
PHP常用设计模式单例, 工厂, 观察者, 责任链, 装饰, 策略,适配,桥接模式
2015-07-15 11:08 1591// 多态, 在JAVA中是这样用的, 其实在PHP当中可 ... -
php命令行界面
2015-07-16 17:03 919常用选项 php -v php -i ... -
使用phpdocument
2015-07-14 17:05 829pear install phpdoc phpDocumen ... -
将session存储到数据库中
2015-07-14 15:33 772CREATE TABLE sessions ( id ... -
正则表达式向前查找向后查找,环绕或零宽断言
2015-07-14 12:40 2347向前查找和向后查找 1. 向前查找:根据要匹配的字符序列后 ...
相关推荐
在Web开发中,防止表单重复提交是一个重要的问题,它能确保用户操作的唯一性和数据的一致性。ThinkPHP 3.2 是一个基于MVC模式的PHP开发框架,提供了丰富的功能来帮助开发者构建安全、高效的应用。在这个场景中,我们...
本文将深入探讨如何通过自定义标签来防止表单的重复提交,以确保数据的一致性和系统的稳定性。 首先,理解表单重复提交的问题。当用户点击提交按钮时,如果网络连接不稳定或者用户快速多次点击,可能会导致同一份...
使用Cookie防止表单重复提交的原理是在用户第一次提交表单时,后端通过PHP设置一个Cookie,比如命名为`formFlag`,并且将此Cookie的值设置为当前时间戳,同时设定一个过期时间(例如30秒),在这个过期时间内如果...
在网页开发中,防止表单重复提交是一个重要的问题,它能确保用户的数据只被处理一次,避免因网络延迟或误操作导致的重复数据插入。本文将深入探讨如何使用JavaScript、HTTP头信息以及令牌机制来防止表单的重复提交。...
在某帝国面试的时候问题了这个题: 怎么处理post提交重复的问题, 后来跟@暖阳交流,他说记录时间,我没有明白,我想的是用session在表单页面记录下,然后提交页面判断,如果相等则视为成功,并清空session,但有个问题是如果...
PHP 提交表单失败后如何保留填写的信息 当用户提交表单时,可能会因为网络连接不稳定或服务器端错误等原因导致提交失败。在这种情况下,如何保留用户填写的信息是一个重要的问题。本文将介绍如何使用缓存和 Ajax ...
总的来说,防止PHP页面重复提交是一个涉及前端和后端协同处理的问题,需要合理利用JavaScript、session和服务器端验证等手段。正确实施这些策略,能够有效地避免用户误操作或恶意攻击导致的数据混乱。
在PHP开发中,当用户尝试提交表单时,如果因为某些...总结来说,保留PHP表单提交失败后的信息,可以通过设置HTTP缓存头或者使用AJAX技术来实现。而AJAX通常是更优的选择,因为它提供了更好的用户体验和更精确的控制。
本教程将聚焦于使用PHP、MySQL和jQuery实现一个分步找回密码的表单。...在实际开发中,还需要考虑安全措施,如使用预处理语句防止SQL注入,使用HTTPS确保数据传输安全,以及设置合理的令牌过期时间。
加法验证码是一种常见的防止自动化程序(如机器人)非法提交表单的安全机制,它通常用于确保用户是人类,而非机器。在网页开发中,PHP是一种广泛使用的服务器端脚本语言,常用于实现这种功能。下面我们将深入探讨...
1. 创建用户注册表单并处理提交的数据。 2. 使用PHP连接MySQL数据库,安全地存储用户信息。 3. 通过SMTP发送带有激活码的邮件。 4. 实现`active.php`页面,验证激活码的有效性,包括链接的时效性和未使用状态。 5. ...
总结来说,要实现PHP表单提交后退页面仍保留表单内容,关键在于结合使用`session_start()`和`header("Cache-control: private")`来避免浏览器缓存页面,并利用session存储表单数据。这样,用户在后退时,系统会从...
例如,对表单数据进行过滤和验证,使用预处理语句保护数据库操作,以及使用 `htmlspecialchars()` 或 `strip_tags()` 防止 XSS 攻击。在使用 session 和 cookie 时,也需要考虑数据加密和安全设置,如设置合适的 ...
针对标题“php防止CC攻击代码 php防止网页频繁刷新”以及描述中提供的内容,可以总结出以下知识点: ***攻击的原理:CC攻击指的是攻击者利用代理服务器发起对目标网站的大量合法请求,从而模拟多用户连续不断地访问...
5. **数据处理**:当用户提交投票时,PHP脚本会捕获这些数据,检查投票的有效性(例如,防止同一用户重复投票),然后更新数据库中的相应投票计数。 6. **CRUD操作**:系统支持添加、删除等操作。添加通常指的是...
2. 数据处理:当用户提交留言时,PHP脚本会捕获这些数据,并进行必要的验证和清理,以防止SQL注入等安全问题。例如,可能会检查字段是否为空,电子邮件格式是否正确,以及内容中是否含有非法字符。数据处理还包括将...
标题中的“表单要求Captcha Code”指的是网页表单中常用的验证码技术,它主要用于防止自动化的机器人或恶意脚本进行欺诈性操作,如批量注册、恶意登录等。验证码(Captcha)是“Completely Automated Public Turing ...
1. **表单处理**:创建HTML表单,让用户输入邮箱地址,使用POST方法提交数据到PHP脚本。 2. **数据库操作**:查询数据库,验证邮箱地址是否存在于用户表中。这需要熟悉SQL语句,如`SELECT * FROM users WHERE email...