防直接访问 防重复提交

简介:

防止直接访问PHP页面
1.可以在A加COOKIE,B判断COOKIE后用完删掉COOKIE
2. 使用$_SERVER['HTTP_REFERER'] 得到链接到当前页面的前一页面的地址
3.token令牌

Java代码   收藏代码
  1. <?php  
  2. /* 
  3. * PHP简单利用token防止表单重复提交 
  4. * 此处理方法纯粹是为了给初学者参考 
  5. */  
  6. session_start();  
  7. function set_token()  
  8. {  
  9.     $_SESSION['token'] = md5(microtime(true));  
  10. }  
  11.   
  12. function valid_token()  
  13. {  
  14.     $return = $_REQUEST['token'] === $_SESSION['token'] ? true : false;  
  15.     set_token();  
  16.     return $return;  
  17. }  
  18.   
  19. //如果token为空则生成一个token  
  20. if (!isset($_SESSION['token']) || $_SESSION['token'] == '') {  
  21.     set_token();  
  22. }  
  23.   
  24. if (isset($_POST['test'])) {  
  25.     if (!valid_token()) {  
  26.         echo "token error";  
  27.     } else {  
  28.         echo '成功提交,Value:' . $_POST['test'];  
  29.     }  
  30. }  
  31. ?>  
  32. <form method="post" action="">  
  33.     <input type="hidden" name="token" value="<?php echo $_SESSION['token'] ?>">  
  34.     <input type="text" name="test" value="Default">  
  35.     <input type="submit" value="提交"/>  
  36. </form>  

基于业务方面的控制

1)基于DB中退款订单状态的验证

2)利用数据库唯一索引机制的验证

3)基于缓存的计数器验证:

由于数据库的操作比较消耗性能,了解到redis的计数器也是原子性操作。果断采用计数器。既可以提高性能,还不用存储,而且能提升qps的峰值。还是以订单退款为例子:
每次request进来则新建一个以orderId为key的计数器,然后+1。如果>1(不能获得锁): 说明有操作在进行,删除。如果=1(获得锁): 可以操作。操作结束(删除锁):删除这个计数器。

 

前端防止重复提交,禁用按钮或链接

Java代码   收藏代码
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
  2. <html>  
  3. <head>  
  4. <title>测试</title>  
  5. </head>  
  6. <script language="javascript">  
  7. var t = null;  
  8. var flag = true;  
  9. function check(obj) {  
  10.     if (flag) {  
  11.         obj.disabled = flag;  
  12.         flag = false;  
  13.         t = setTimeout(function(){disable(obj)}, 5000); // 5秒间隔  
  14.         window.open("http://www.baidu.com""newWindow");  
  15.     }  
  16. }  
  17.   
  18. function disable(obj) {  
  19.     obj.disabled = flag;  
  20.     flag = true;  
  21.     if (t != null)  
  22.     clearTimeout(t);  
  23. }  
  24. </script>  
  25. <body>  
  26. <a href="#" onclick="check(this)">ceshi1</a>  
  27. </body>  
  28. </html>  

9秒后按钮激活代码

Java代码   收藏代码
  1. <input class="button" type="submit" name="rulesubmit" value="同 意" style="height: 23px">  
  2. <input class="button" type="button" name="return" value="不同意" style="height: 23px" onclick="javascript:history.go(-1);">  
  3. </center>  
  4. </form>  
  5.   
  6. <script type="text/javascript">  
  7. var secs = 9;  
  8. var wait = secs * 1000;  
  9. document.bbrules.rulesubmit.value = "同 意(" + secs + ")";  
  10. document.bbrules.rulesubmit.disabled = true;  
  11. for(i = 1; i <= secs; i++) {  
  12.         window.setTimeout("update(" + i + ")", i * 1000);  
  13. }  
  14. window.setTimeout("timer()", wait);  
  15. function update(num, value) {  
  16.         if(num == (wait/1000)) {  
  17.                 document.bbrules.rulesubmit.value = "同 意";  
  18.         } else {  
  19.                 printnr = (wait / 1000) - num;  
  20.                 document.bbrules.rulesubmit.value = "同 意(" + printnr + ")";  
  21.         }  
  22. }  
  23. function timer() {  
  24.         document.bbrules.rulesubmit.disabled = false;  
  25.         document.bbrules.rulesubmit.value = "同 意";  
  26. }  
  27. </script>  

jQuery one当使用 one() 方法时,每个元素只能运行一次事件处理器函数

Java代码   收藏代码
  1. $("p").one("click",function(){    
  2. });  
2324

 

相关文章
|
1天前
|
云安全 监控 安全
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
821 5
|
12天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1053 37
|
8天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
620 36
|
12天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
677 57
大厂CIO独家分享:AI如何重塑开发者未来十年
|
8天前
|
存储 自然语言处理 测试技术
一行代码,让 Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略
本文深入剖析 Elasticsearch 中模糊查询的三大陷阱及性能优化方案。通过5000 万级数据量下做了高压测试,用真实数据复刻事故现场,助力开发者规避“查询雪崩”,为您的业务保驾护航。
434 27
|
15天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
913 59
Meta SAM3开源:让图像分割,听懂你的话
|
5天前
|
弹性计算 网络协议 Linux
阿里云ECS云服务器详细新手购买流程步骤(图文详解)
新手怎么购买阿里云服务器ECS?今天出一期阿里云服务器ECS自定义购买流程:图文全解析,阿里云服务器ECS购买流程图解,自定义购买ECS的设置选项是最复杂的,以自定义购买云服务器ECS为例,包括付费类型、地域、网络及可用区、实例、镜像、系统盘、数据盘、公网IP、安全组及登录凭证详细设置教程:
202 114