当前位置:  编程技术>.net/c#/asp.net

asp.net防止刷新页面重复提交表单原理与实例

    来源: 互联网  发布时间:2014-08-30

    本文导语:  实现原理: 刷新提交表单,实际提交的是上一次正常提交的表单,所以要做一个标志,判断出是新表单还是上一次的旧表单就可以分辨出是否进行了重复提交操作。 实现方法: 在页面上放置一个Hidden域,当页面第一次载入时...

实现原理:
刷新提交表单,实际提交的是上一次正常提交的表单,所以要做一个标志,判断出是新表单还是上一次的旧表单就可以分辨出是否进行了重复提交操作。

实现方法:
在页面上放置一个Hidden域,当页面第一次载入时,在Session里面保存一个标志,同时,把这个标志保存到页面上的Hidden里面。
提交表单时,判断表单中提交上来的Hidden和Session中的标志是否一致。注意,在每次提交表单的处理之后,要更新Session里面的标志。

1、前端页面代码

代码示例:


    防止重复提交_www.


   
       

           
           
           
           
           
       

   


 

注意:
1)、GetSessionToken()函数是为了获得Session里面保存的标志。
2)、Hidden使用了非服务器控件,这是因为使用服务器控件,并在后台直接获取Session的标志并赋值给这个Hidden的时候,刷新提交到服务器的 表单中的Hidden的值也发生了改变,猜想是服务器控件的话,表单里面的值是保持同步的。

2、后台代码:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Security.Cryptography;
using System.Text;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //第一次载入的时候,生成一个初始的标志
        if (null == Session["Token"])
        {
            SetToken();
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Request.Form.Get("hiddenTestN").Equals(GetToken()))
        {
            lblMessage.ForeColor = System.Drawing.Color.Blue;
            lblMessage.Text = "正常提交表单";
            SetToken();//别忘了最后要更新Session中的标志
        }
        else
        {
            lblMessage.ForeColor = System.Drawing.Color.Red;
            lblMessage.Text = "刷新提交表单";
        }
    }

    //获得当前Session里保存的标志
    public string GetToken()
    {
        if (null != Session["Token"])
        {
            return Session["Token"].ToString();
        }
        else
        {
            return string.Empty;
        }
    }

    //生成标志,并保存到Session
    private void SetToken()
    {
        Session.Add("Token", UserMd5(Session.SessionID + DateTime.Now.Ticks.ToString()));
    }

    //这个函数纯粹是为了让标志稍微短点儿,一堆乱码还特有神秘感,另外,这个UserMd5函数是网上找来的现成儿的
    protected string UserMd5(string str1)
    {
        string cl1 = str1;
        string pwd = "";
        MD5 md5 = MD5.Create();
        // 加密后是一个字节类型的数组
        byte[] s = md5.ComputeHash(Encoding.Unicode.GetBytes(cl1));
        // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
        for (int i = 0; i < s.Length; i++)
        {
            // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
            pwd = pwd + s[i].ToString("X");
        }
        return pwd;
    } 
}

注意:
1)、在页面第一次载入的时候要生成标志,以后就不用了。
2)、在表单处理的函数的最后,记得要更新标志。
3)、标志选用了当前SessionID加上当前时间毫秒值,基本可以避免标志重复,然后进行MD5,可以缩短下标志。


    
 
 

您可能感兴趣的文章:

  • asp.net防止后退与重复提交表单的简单方法
  • ASP.Net中表单POST到其他页面的方法分享
  • asp.net中post表单保存页面状态并输出源码的方法
  • asp.net获取HTML表单File中的路径的方法
  • Asp.Net模拟表单提交数据和上传文件的实现代码
  • 在ASP 中用JAVASCRIPT 怎么判断表单输入的日期是否正确?
  • asp.net实例 定义和使用asp:AccessDataSource
  • asp.net输出重写压缩页面文件的实例
  • asp match正则函数使用Matchs实例
  • c#(asp.net)连接excel的实例代码
  • asp.net实例代码 在DataGrid控件中显示数据
  • asp.net 伪静态简单实例
  • asp.net取得所有颜色值实例
  • asp.net实例代码之DataGrid数据编辑
  • asp.net 动态添加多个用户控件(实例代码)
  • asp.net 邮件发送类的简单实例
  • asp.net 动态创建控件的演示实例
  • asp.net操作cookie实例代码
  • asp.net实例代码之添加DataColumn到DataTable控件中
  • asp.net批量删除实例代码教程
  • asp.net 操作cookie实例详解
  • asp.net实例代码之显示数据在不同的控件
  • ASP.net WebAPI 上传图片实例
  • asp.net读取与删除磁盘文件的实例代码
  • asp.net实例代码之datagrid页面索引
  • asp.net实例代码之更新访问数据
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 我用asp.net做一个聊天室,各位有没有好的页面刷新办法?
  • asp.net Timer无刷新定时器的例子
  • 我用asp.net做一个聊天室,要求在一个帧里点击按钮,立即刷新另外一帧,怎么做?
  • asp.net防止页面刷新重复提交的代码
  • Asp.net弹出窗口同时防止刷新重复提交的方法
  • asp.net 防止刷新重复提交的代码(禁用工具栏刷新按钮 变灰)
  • Asp.net防止后退、刷新重复提交的方法
  • c# UpdatePanel无刷新上传图片 asp.net无刷新上传
  • Asp.net防刷新重复提交与防后退的方法
  • asp.net防止刷新重复提交的方法与代码
  • asp.net页面刷新后字体等变大问题的解决方法
  • 如何解决 asp.net 点击验证码不刷新的问题
  • c#(asp.net)防止刷新重复提交数据的解决方法
  • ASP.NET 验证码与刷新验证码的例子
  • asp.net刷新页面的几种方法
  • ASP.NET防止页面刷新的两种解决方法小结
  • asp.net 页面刷新多种方法详解(附实例)
  • asp.net+jquery无刷新三级联动的代码举例
  • asp.net 无刷新分页的例子
  • asp.net中利用Jquery+Ajax+Json实现无刷新分页的实例代码
  • ASP.NET之 Ajax相关知识介绍及组件图
  • 我想了解一些关于Java怎样与Asp或Asp.net结合方面在未来发展方向的问题?
  • c#/ASP.NET操作cookie(读写)代码示例
  • asp.net 动态添加多个用户控件(实例代码) iis7站长之家
  • win2008 r2 服务器环境配置(FTP/ASP/ASP.Net/PHP)
  • asp与asp.net的session共享
  • 如何在unix下发布asp?
  • 怎么让Apache支持Asp?
  • ??谁能把ASP代码改为JSP的
  • Linux平台下哪种方法实现ASP好?
  • ASP和ASP.Net共享Session解决办法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3