防止重复提交 aspx.net
:服务器控制。
后台生成一个token,存入session或者其他缓存里面。渲染表单时,给form一个隐藏的token(令牌).
用户提交表单时:
先判断表单里面的token是否存在,不存在拒绝接受此数据;
如果存在token,判断此表单里的token是否和session里的token一致,如果不一致,拒绝处理数据;如果一致,处理表单,并从session里移除此token.
那么,当用户成功提交表单后,如果再次提交,会因为session里的token已删除,从而让服务器告诉用户“不要重复提交表单!”.
页面上的代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:HiddenField ID="HiddenField1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="提交"/>
<div>
</div>
</form>
</body>
</html>
后台代码
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication2
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SetSession(); //首次加载的时候 给session 赋值 , 并给隐藏于 赋值,
}
}
public void SetSession()
{
Session["record"] = DateTime.Now.ToString(); //保存页面上的值到session中
HiddenField1.Value = Session["record"].ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
if (HiddenField1.Value == Session["record"].ToString()) //当点击按钮时,他们的值一定是相等的
{
Page.ClientScript.RegisterClientScriptBlock(GetType(), "key","", true);
//Response.Write(String.Format("<script>alert('{0}')</script>",Session["record"].ToString()));
SetSession(); // 当执行的时候 如果是点按钮 session 和 隐藏于的值是相等的, 要是 刷新的话, session 是肯定变得但 隐藏于的 值 是缓存 里的 上一次的 ,这是 浏览器的一个 bug
}
else
{
Page.ClientScript.RegisterClientScriptBlock(GetType(), "key", "alert('请不要重复提交');", true);
}
}
}
}
防止重复提交 aspx.net的更多相关文章
- ASP.Net中防止页面刷新重复提交的几种方法
[摘要] 目前很多网站都要提交页面插入或更新数据库,比如留言本,一个用户提交留言后,如果按F5,就会重新提交一遍留言,导致数据库出现两条一模一样的留言,本文介绍了几种防止页面刷新,导致重复提交数据的方 ...
- ASP.NET Web Form和MVC中防止F5刷新引起的重复提交问题
转载 http://www.cnblogs.com/hiteddy/archive/2012/03/29/Prevent_Resubmit_When_Refresh_Reload_In_ASP_NET ...
- 关于Asp.Net中避免用户连续多次点击按钮,重复提交表单的处理
Web页面中经常碰到这类问题,就是客户端多次点击一个按钮或者链接,导致程序出现不可预知的麻烦. 客户就是上帝,他们也不是有意要给你的系统造成破坏,这么做的原因很大一部分是因为网络慢,点击一个操作之后, ...
- asp.net 防止页面刷新或后退引起重复提交
项目中经常遇到刷新后重复的向数据库增加一条相同的记录,造成数据重复,如何规避这些问题呢?下面我们就一起讨论一下在asp.net怎样防止页面刷新或后退引起重复提交数据的问题: 其实asp.net防止刷 ...
- 页面按F5重复提交数据解决方法
在Web开发中,必须面对的问题就是表单的重复提交问题(这里仅指F5刷新造成的重复提交),.NET中处理这个问题似乎没有什么好的方法. 在网上搜索得到的解决方法主要有两种,一种是直接让表单按钮失效,从而 ...
- [ASP.NET教程] 防止表单重复提交
第一种方法:javascript控制.缺点,一般用户使用没问题,但是懂点js的还是可以强行重复提交.而且,后退再提交,你也没啥办法.第二种方法:服务器控制.后台生成一个token,存入session或 ...
- ASP.NET防止连续多次点击提交按钮 导致页面重复提交
PS:实际使用中发现,第①种方法在火狐浏览中有时候有问题.第2种方法,在各个浏览器中都没问题 近做项目遇到了这样的情况: 公司网络比平常慢了不少,在点击保存按钮提交页面后需等待挺长的一段时间,忍不住手 ...
- 12、Struts2表单重复提交
什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...
- 如何解决ajax重复提交的问题
如下一段代码: 先忽略我没引jquery.js的问题,这是一个案例. 当我们点击提交时,控制台输出两次e,在network里查看,可以看到我们的ajax传输了两次,造成了数据重复提交. 一种解释为bu ...
随机推荐
- 面试题40:最小(大)的K个数
剑指offer40题,同时这也是面试高发题目 2019.4 蚂蚁金服问道:求1000万个数据中的前K个数. 思路: 1.直接上排序算法,然后我们就取排好顺序的前K个即可.但是单考虑快排,时间复杂度也要 ...
- C语言|博客作业4
一.本周教学内容:用C语言编写程序-循环结构 2.4 输出华氏-摄氏温度转换表.要求学生掌握使用for循环语句实现指定次数的循环程序设计. 二.本周作业头 问题 答案 这个作业属于哪个内容 C语言程序 ...
- spring cloud学习--eureka 01
本博客为学习使用,学习教程翟永超 spring cloud 微服务实战 搭建eureka server注册中心 spring initialize构建spring boot项目 构建网址:https: ...
- python基础--选择排序
1.首先用一张图来描述选择排序的具体过程 2.废话不多说,上代码 # 1.定义函数:选择排序 def choose_sort(list): list_len = len(list) for i in ...
- Redis 设置权限密码,以及如何开启关闭设置
linux redis 设置密码: 在服务器上,这里以linux服务器为例,为redis配置密码. 1.第一种方式 (当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后 ...
- Oracle Linux下使用sqlplus的edit命令
1.使当前会话生效 define_editor=vi SQL> select * from dual; D - X SQL> edit Wrote file afiedt.buf 21 1 ...
- 前端学习(三十)es6的一些问题(笔记)
赋值表达式 document.onclick = document.onmouseover = fn; var a = b = c = d = 5; 不推荐 逗号表 ...
- 三步完成Source Insight 4.0 破解安装(转)
转自:https://blog.csdn.net/biubiuibiu/article/details/78044232 三步完成Source Insight 4.0 破解安装 下载地址有更新,之 ...
- C#驱动mysql明明数值不为空却一直说DBNull.Value的诡异情况
最近遇见了一个很诡异的情况,就是当我们关联表查询时,副表如果有bit类型的字段的话,C#驱动读取该列时就会抛出“DBNull.Value不能转换为其他类型”的异常,但是我们如果拿出sql语句单独查询的 ...
- centos系统jdk安装
下载Oracle官网的jdk来安装 不使用openjdk 最新的官网地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...