zoukankan      html  css  js  c++  java
  • ASP.NET防止按F5键造成表单重复提交

    F5键会引起表单重复提交,做过asp.net相信都会遇到过这个问题。

      最有效的是一篇发表在MSDN的方法

      原理如下:

        在asp.net页面中有一个名为_VIEWSTATE的隐藏域,这个隐藏域保存着当前页面中控件的视图状态,如果是通过提交按钮提交或者页面回发,这个隐藏域的值会改变,但是如果是通过按浏览器的F5键刷新,则这个隐藏域的值不会改变。

        通过上述的原理,我们只需在页面保存上一次隐藏域的值,然后再页面执行时判断对比当前隐藏域的值,就可以知道客户端是通过哪种方式来执行数据提交。

      但是这种方法的弊端也很明显:

        服务器端需要每次保存额外的数据,要每次获取隐藏域的值,必须通过HttpModule拦截,这样势必影响应用程序的其他部分,因为HttpModule是全局性的,经过测试,图片显示不了,使用的第三方的JavaScript库会失去作用。

        前段时间看到了新的方法。

      通过判断Request中的Header信息,可以达到防止表单重复提交 这两次请求都成功了,但你仔细观察Headers中的Accept的值,你会发现第一次通过提交按钮提交的时候, Accept反应的是当前客户端环境下可以接受的多媒体类型,但是第二次通过按F5刷新提交的时候的,它的值变成了 */* ,表示所有的。

      因此,通过判断Request.Headers["Accept"] != "*/*" 就可以达到我们想要的效果。
  • 相关阅读:
    CURL POST提交json类型字符串数据和伪造IP和来源
    windows下nginx的配置
    常用JS兼容问题工具
    无限级分类--Array写法
    JS获取对象指定属性在样式中的信息
    解决IE和Firefox获取来源网址Referer的JS方法
    异步轮询函数
    响应式布局--特殊设备检测
    jQuery Validate校验
    [LeetCode#124]Binary Tree Maximum Path Sum
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/2106249.html
Copyright © 2011-2022 走看看