首页 / PHP / 防直接访问防重复提交
防直接访问防重复提交
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了防直接访问防重复提交,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2988字,纯文字阅读大概需要5分钟。
内容图文
防止直接访问PHP页面1.可以在A加COOKIE,B判断COOKIE后用完删掉COOKIE
2. 使用$_SERVER['HTTP_REFERER'] 得到链接到当前页面的前一页面的地址
3.token令牌
<?php /* * PHP简单利用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); 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['test'])) { if (!valid_token()) { echo "token error"; } else { echo '成功提交,Value:' . $_POST['test']; } } ?> <form method="post" action=""> <input type="hidden" name="token" value="<?php echo $_SESSION['token'] ?>"> <input type="text" name="test" value="Default"> <input type="submit" value="提交"/> </form>
ajax token防止重复提交
$.ajax({ type: "POST", url: do_order_url, data: { '_csrf_token':_csrf_token, //token 'item_id':item_id, },
基于业务方面的控制
1)基于DB中退款订单状态的验证
2)利用数据库唯一索引机制的验证
3)基于缓存的计数器验证:
由于数据库的操作比较消耗性能,了解到redis的计数器也是原子性操作。果断采用计数器。既可以提高性能,还不用存储,而且能提升qps的峰值。还是以订单退款为例子:
每次request进来则新建一个以orderId为key的计数器,然后+1。如果>1(不能获得锁): 说明有操作在进行,删除。如果=1(获得锁): 可以操作。操作结束(删除锁):删除这个计数器。
前端防止重复提交,禁用按钮或链接
Java代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>测试</title> </head> <script language="javascript"> var t = null; var flag = true; function check(obj) { if (flag) { obj.disabled = flag; flag = false; t = setTimeout(function(){disable(obj)}, 5000); // 5秒间隔 window.open("http://www.baidu.com", "newWindow"); } } function disable(obj) { obj.disabled = flag; flag = true; if (t != null) clearTimeout(t); } </script> <body> <a href="#" onclick="check(this)">ceshi1</a> </body> </html>
9秒后按钮激活代码
<input class="button" type="submit" name="rulesubmit" value="同 意" style="height: 23px"> <input class="button" type="button" name="return" value="不同意" style="height: 23px" onclick="javascript:history.go(-1);"> </center> </form> <script type="text/javascript"> var secs = 9; var wait = secs * 1000; document.bbrules.rulesubmit.value = "同 意(" + secs + ")"; document.bbrules.rulesubmit.disabled = true; for(i = 1; i <= secs; i++) { window.setTimeout("update(" + i + ")", i * 1000); } window.setTimeout("timer()", wait); function update(num, value) { if(num == (wait/1000)) { document.bbrules.rulesubmit.value = "同 意"; } else { printnr = (wait / 1000) - num; document.bbrules.rulesubmit.value = "同 意(" + printnr + ")"; } } function timer() { document.bbrules.rulesubmit.disabled = false; document.bbrules.rulesubmit.value = "同 意"; } </script>
Jquery one当使用 one() 方法时,每个元素只能运行一次事件处理器函数
$("p").one("click",function(){ });
内容总结
以上是互联网集市为您收集整理的防直接访问防重复提交全部内容,希望文章能够帮你解决防直接访问防重复提交所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。