如何防止用户重复提交数据

php防止恶意刷新页面的方法 php防止恶意刷新页面的方法 一般来说,恶意刷新就是不停的去刷新提交页面,导致出现大量无效数据,下面我们来总结一下php 防止恶意刷新页面方法总结。 防止恶意刷页面的原理是: 要求在页面间传递一个验证字符串,  在生成页面的时候 随机产生一个字符串,  做为一个必须参数在所有连接中传递。同时将这个字符串保存在session中。 点连接或者表单进入页面后, 阅读详情

这篇文章从语法上看,原作者应该是从什么地方翻译过来的。

简单的解决方案:
最简单的方式就是当用户提交之后,在你的服务器端控件的代码中使用Response.Redirect("selfPage")语句。但是大多的数包括我都不使用这种方法。

多次提交:
请注意:这篇文章并不是有关如何防止在一个页面中多次提交。这篇文章是教你在提交了请求之后如何防止页面进行刷新。情况是这样的,当用户提交了按钮之后,最终用户就不能再点击提交按钮了。但是这样最终用户仍然可以通过点击浏览器的刷新按钮来提交数据。如果要防止多次提交你可以去 http://metabuilders.com/网上找一些资料,它那里有一个提交控件可以用。

常规的解决方案
习惯的解决方法是存储Session的ID和当提交时ViewState中存储的SessionID相比较来防止用户刷新屏屏幕。前提你的程序中允许了自动回发,如果不是的话,就得在hidden field存储这个变量了。下面给出一个典型的例子。在Page_Load事件中你存储了第一次提交时的SessionID和一个时间戳。
protected System.Web.UI.WebControls.Button SubmitButton;

protected System.Web.UI.WebControls.Label RefreshID;     

private void Page_Load(object sender, System.EventArgs e)

{
     if (RefreshID.Text.Length == 0) 
    {
            RefreshID.Text = Session.SessionID+DateTime.Now.Ticks.ToString();
      }
}
 

private void Button1_Click(object sender, System.EventArgs e)

{
      string sesToken = (string) Session[FrameworkConst.SYNC_CONTROL_KEYWORD];      string pageToken = RefreshID.Text;
      if (sesToken != null && sesToken != pageToken)
      {
            Response.Write("The Refresh was performed after submit.");
     } 
      else
      {
            // do your processing here to avoid Refresh trap
            Response.Write("The processing is done here. Disabling submit
button so that user can not perform multiple submit.");
            Response.Write("But still user can peform Refresh on page.");
      }

      Session[FrameworkConst.SYNC_CONTROL_KEYWORD] =       Session.SessionID+DateTime.Now.Ticks.ToString();
      RefreshID.Text = sesToken;         
      SubmitButton.Enabled = false;

}

 不同的解决方案:
 幸运的事,asp.net提供了一些更简单的方法。上面的解决方案的缺点是我们要在控钮的事件中自己决定一些逻辑问题。设想一下,如果在你的解决方案中有成百个要提交的页面,你就得写上许多个这样的逻辑。自定义web控件和HTTP MOdules提供了相同的解决法。你可以将这个控件入在你需要控制的页面上,它就可以起作用了。当然,并不是所有的情况都需要的,比如说搜索页面是允许用户刷新的。但是,在页面中有插入、更新、删除数据库的操作时,控制刷新按钮是绝对有必要的。

下面来看一下上面的方案是如何工作的。
第一步:需要在System.web节中注册HTTP Module模块。

<httpModules>

   <add name="SyncHttpModule" type="EAD.Controller.SyncHttpModule, sync"/>

</httpModules>

第二步:要在控制页的页面内放入我们开发好的控件。

工作原理:
它的工作原理和前面普通讲的是差不多的。只是这里提供了一个通用的方法。这里提供了一种通用的方式。在我看来,如果你有一些好的模式,将大大的加快你的开发速度。

我们需要在第一次提交时在Session中存储标记,并在请求时比较它们是否不同。通过HTTP handler,我们在Session中存储标记。有这样的一个事件PreRequestHandlerExecute 我们可以通过它找到Session,如果是其它事件的话Session是不存在的,比如BeginRequest 事件。在这个事件中比较两者的值,如果不同则证明是Refresh事件。这时你可以添加自己的处理方法,我一般是将转向一个页面告诉用户不能反复提交。
private void OnPreRequestHandlerExecute(object source, EventArgs e)

{

      HttpContext context = ((HttpApplication) source).Context;

      string _keyword = FrameworkConst.SYNC_CONTROL_KEYWORD;

      string sesToken = (string) context.Session[_keyword];

      string reqToken = context.Request.Params[_keyword];
 //如果没有提交过,则保存Session和标记值

      if(reqToken != FrameworkConst.BYPASS_SYNC_KEYWORD)
      {
            context.Session[_keyword] =             context.Session.SessionID+DateTime.Now.Ticks.ToString();
      }
      if(reqToken != null && reqToken != sesToken)
      {
            string path=context.Request.ApplicationPath+
            &"/Common/SyncControl.aspx?returnUrl="+
            &context.Request.Url.AbsolutePath;
            context.Server.Transfer(path);
      }
}

SyncControl 控件将建立一个hidden input field 将在 HTTP module中设置的Session保存起来。

如何利用gretna软件计算脑网络全局属性(聚类系数,小世界属性,最短路径),局部属性指标(度,度分布,节点效率),如何理解网络稀疏度 grena工具箱被设计用于fMRI数据的图论网络分析。它是一套MATLAB函数和基于MATLAB的接口,用于常规的fMRI预处理,用于计算和统计分析最常用的网络指标,如小世界参数、效率、度、间性、关联性、层级性、同步性和模块化。...... 阅读详情

相关推荐

Ubuntu20.04实时内核补丁PREEMPT_RT编译与安装全流程解析

本文详细解析了在Ubuntu20.04系统上编译与安装实时内核补丁PREEMPT_RT的全流程。从内核与补丁版本匹配、编译环境准备,到内核配置、编译排错,再到最终安装、验证与进阶优化,提供了手把手的实战指南,旨在帮助机器人、工业控制等对实时性有苛刻要求的开发者构建低延迟、高确定性的Linux系统。

weixin_29213827的博客 186

Java基础(39)防止请求多次提交

防止多次提交请求主要是为了避免用户由于不耐烦、误操作或者网络延迟等原因造成的重复提交,可能会导致数据的重复处理或者是非法状态。以下是一些常见的策略,以及它们实现的代码示例。

qq_43012298的博客 688

硬件笔记——HDMI接口

HDMI可以同时传输视频信号、音频信号和控制信号。其中高速信号有四组:从Data TX到Data RX有3组差分数据信号(TMDS_DATA0~2)和一组差分时钟信号(TMDS_CLOCK)。以及若干低速线。脚编号信号名称信号类型功能说明1热插拔检测连接状态检测。接收端通过此引脚向源端发送高电平信号,通知其已连接并可以开始读取EDID。2UTILITY车载用途悬空3TMDS数据通道2差分信号正极,用于传输视频像素、音频和数据包。4TMDS数据2屏蔽。

2501_94625908的博客 537

在ASP.NET Web Form和MVC中防止F5刷新引起的重复提交

什么是刷新/重新载入 IE中的刷新(Refresh),在FF和Chrome中称为重新载入(Reload),与正常进入页面的区别在于以下两点: 1. 缓存控制 如果文件(比如图片)在本地缓存中已经存在,正常进入页面会不访问服务器而直接从本地加载。而对于刷新操作,即使存在本地缓存,也会强制访问服务器检查更新,在Request Header中会带有“If-Modified-Since”标...

weixin_30654419的博客 542

ESP32-C5硬件设计全链路指南:ADC/SDIO/USB/RF PCB实战

模数转换器(ADC)和高速外设接口是嵌入式系统硬件设计的核心基础。理解ADC通道映射、输入阻抗特性与抗干扰布线,是保障传感器采样精度的前提;掌握SDIO、USB差分信号的阻抗控制、端接策略与电源去耦方法,则直接决定通信可靠性与EMC性能。在Wi-Fi 6/Bluetooth 5.3双模SoC如ESP32-C5中,ADC复用约束、USB与SDIO管脚冲突、RF匹配网络调校、四层板叠层规划等工程细节,共同构成高成功率PCB落地的关键技术栈。本文聚焦ESP32-C5平台,系统梳理从模拟前端到射频输出的硬件设计规范

weixin_35756130的博客 345

224G PAM-4 通道的 PCB 和封装设计

该行业正在努力实现层厚非常低的 sub-Dk = 3 材料,以及更先进的加工,这将使封装和 PCB 中的透射电镜截止值更高。当回波损耗占主导地位时,我们基本上需要去除沿互连产生阻抗失配的任何元件,就像上面描述的更光滑的铜和更低的 Dk 值一样。第二个影响是传输线阻抗匹配在 56 GHz 范围内的非常高的频率下非常困难的主要原因之一,另一个因素是 Tx 或 Rx 封装/缓冲器中的寄生效应。由于 PCB 和封装中的长度刻度,这是 BGA 上的焊盘、过孔和球等小结构开始在输入阻抗中产生明显偏差的频率范围。

jkh920184196的博客 840

解决刷新页面造成的数据重复提交问题

执行过postback操作的web页面在刷新的时候,浏览器会有“不重新发送信息,则无法刷新网页”的提示,若刚刚执行的恰好是往数据库插入一条新记录 的操作,点[重试]的结果是插入了两条重复的记录,以前一直是用保存数据后重新转向当前页面的方法解决,最近又找到了一个新的方法。问题分析    在System.Web.UI.Page类中,有一个名为ViewState属性用以保存页面的当前视图状态,观

mndn_nana的专栏 1089

Win10文件夹只读属性自动恢复?彻底解决方法解析

Win10文件夹只读属性自动恢复?彻底解决方法解析在Windows系统使用过程中,文件权限管理常会遇到棘手问题。最近多位用户反馈:取消文件夹只读属性后,系统却自动恢复该设置,导致无法正常复制或修改文件。本文将深入分析该现象的产生原因,并提供多种解决方案,帮助开发者彻底摆脱权限困扰。

mmoo_python的博客 7519

JAVA 防止重复提交 防止用户重复提交数据拦截器

前台没有控制住数据重复提交请求,java 通过拦截器 控制请求数据重复问题

blue_wmm的博客 1313

SillyTavern与Claude Code API集成:从零搭建AI聊天酒馆的完整指南

本文提供了一份从零搭建SillyTavern AI聊天前端的完整指南,重点讲解如何将其与Claude Code API集成。内容涵盖Node.js环境准备、SillyTavern部署、OpenAI兼容格式的API配置、模型选择与参数调校,以及角色扮演、扩展功能等高级玩法,帮助用户打造本地化、可定制的专属AI聊天体验。

assembly8low的博客 2606

大数据领域存算分离:教育行业的数据应用探索

在当今数字化时代,教育行业积累了海量的数据,如学生的学习记录、考试成绩、在线学习行为等。如何高效地存储、管理和分析这些数据,以挖掘其潜在价值,为教育决策、教学改进和学生个性化发展提供支持,成为教育行业面临的重要挑战。大数据领域的存算分离技术为解决这一问题提供了新的思路和方法。本文旨在探索存算分离技术在教育行业的数据应用,分析其原理、优势和实际应用场景,为教育行业的数据管理和分析提供参考。本文共分为十个部分。第一部分介绍背景,包括目的和范围、预期读者、文档结构概述和术语表;

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 812

mysql重复提交数据_用户提交表单防止重复数据方法总结

用户在操作表单数据时往往总是重复提交数据,尤其是在web应用中此类问题相对不叫常见,用户网络缓慢当快速点击按钮多次,刷新页面后会出现多条数据或点击提交数据之后刷新页面再后退重复之前操作也会导致重复提交数据表单,此类问题导致原因是因为浏览器重复提交http请求导致。下面简单介绍几种防止表单重复提交数据的方法:1、Post/Redirect/GetPost/Redirect/Get 简称PRG,是一种...

weixin_39963830的博客 368

语言模型推理能力与计算表达力深度解析

语言模型的推理能力本质上是一种知识迁移与泛化应用的过程,其核心在于Transformer架构中的自注意力机制和前馈网络的协同作用。计算表达力作为衡量模型能力的关键指标,涉及函数逼近、组合泛化和上下文理解等多个维度。随着模型规模的扩大,涌现能力现象揭示了参数规模与推理能力之间的非线性关系。在实际应用中,通过提示工程和微调策略可以有效激活和优化模型的推理表现。当前研究正探索模块化架构和世界模型整合等方向,以突破长程推理和因果关系建模等前沿挑战。本文深入探讨了语言模型推理泛化的技术原理与实践方法,为理解计算表达力

weixin_42521032的博客 341

注册或者点击按钮时,怎么防止用户重复提交数据(实例讲解)

这篇文章主要是对注册或者点击按钮时,怎么防止用户重复提交数据进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 asp.net实现点击按钮后设按钮不可用并提交  代码如下: 客户端加载的时候,重新将这个操作再启动  代码如下:             function controlButton(flag) {             var btnObj

670

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

巧用Ajax的beforeSend 提高用户体验,防止重复提交数据

jQuery是经常使用的一个开源js框架,其中的$.ajax请求中有一个beforeSend方法,用于在向服务器发送请求前执行一些动作。 具体可参考jQuery官方文档:http://api.jquery.com/Ajax_Events/ $.ajax({ beforeSend: function(){ // Handle the beforeSend event }...

☆╮123☆ 632

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

asp.net清除页面缓存,防止页面回退重复提交数据及防止同一用户同时登录

//清除页面缓存,防止页面回退重复提交数据 在页面里做以下设置就可以使页面的缓存失效,每次都需要获取新页面。 Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); /* 要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用

深南大道 2819

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

PHP服务器端防止用户重复提交数据

<?phpsession_start();/***检查表单是否被重复提交*相同内容的表单在设定时间内只能提交1次*@paramint$iTimeOffset*@returnbool*/functioncheckFormSubmit($iTimeOffset=60){//取得表单的标识$idForm=md5...

weixin_34132768的博客 1007

防止用户多次点击导致重复提交数据的问题

前端在做开发的过程中,经常会遇到以下的场景:用户填写完了表单,然后点击提交按钮,这个时候需要把数据提交给后台,然而提交给后台是需要一个过程的,如果这个时候用户再一次点击提交按钮就会出现第一次数据还没提交完,用户又提交了第二次数据,如此反复,就会提交很多重复的数据;解决方案: 在用户点击完提交按钮以后,立马禁用按钮,不允许用户再次点击,等数据提交完毕以后,再次让用户点击

qq_36800701的博客 7848

yii防止延迟用户多次点击按钮重复提交数据

是不是被用户的行为所困扰? 一、 一个表单用户点击提交按钮了N次,这也导致了数据提交了N次。 为了此受到了测试的欺辱,受到了老板的批评? 不用怕,它就是来拯救你的。 第一步:打开命令行,敲入 composer require light\yii2-lock-form=~1.0.0 第二步:上个厕所 第三步:如果你的项目中已经使用了 yii2-bootstrap, 那么好,只需要在的你...

weixin_30677617的博客 231

防止用户不断刷新和重复提交

防止用户不断刷新和重复提交的实现原理和代码: 1、原理:session防止用户重复提交的实现原理,当用户首次提交时,把提交的时间写入session,当用户不断刷新或提交时,与写入session时间进行比对,若小于N秒时,说明用户是不断刷新或重复提交。 2、代码,前台代码: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

xunianchong的专栏 1510

JS 防止表单重复提交

<script type="text/javascript"> var checkSubmitFlg = false; function checkSubmit() { if (!checkSubmitFlg) { //第一次提交 checkSubmitFlg = true; return true; } else { //重复提交 ale...

138

防止重复提交

简介 在现在的web开发中我们经常使用ajax从后端获取数据,提交数据。对于有些游戏爱好者或者手速甚快的同学来说,一个按钮触发click事件可以触发多次。有经验的前端开发者肯定会使用防止重复提交方式避免重复提交数据。有经验的后端则会在每次提交数据时加vision版本号。如果后端加版本号来验证,则需要前端每次提交时增加版本号这个字段。因此做防止重复提交还是交给伟大的前端同学哈!现在我就把我所使用的方...

weixin_33885253的博客 360

jsp中使用session防止重复刷新

对于一些数据处理的B/S系统,在业务数据提交后都需要防止用户刷新页面而造成多次提交数据。使用session来防止刷新是一个不错的解决方案,下面讲解一下具体的做法。1.前提: “提交”按钮点击后要失效。 session变量tmp,值为“ok”和“no”。 2.数据提交页面的控制:if(tmp=="ok")...{       tmp = "no"; 

orangekent地带 1570

使用struts2拦截器实现防止表单数据重复提交

//-----------------------------------------jsp-----------------------------------------------&lt;%@ page language="java" import="java.util.*" pageEncoding="utf-8"%&gt;&lt;%@ taglib uri="/struts-tags...

171
上一篇: HttpModule
下一篇: HttpModule和HttpHandler(续)
HowcanIdo
博客等级 码龄25年 1粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值