精华内容
下载资源
问答
  • 重复提交表单

    2013-12-27 09:41:21
    什么是重复提交 所谓重复提交,就是用户在页面多次点击提交按钮,或者通过不断刷新页面,把已经提交过的数据多次向后台提交。 重复提交对于查询类的功能,问题还不是太大,但是对于新增或是修改类的功能,就有可能...
  • 主要介绍了ThinkPHP防止重复提交表单的方法,结合实例形式分析了thinkPHP防止重复提交表单的各种常见操作技巧与相关注意事项,需要的朋友可以参考下
  • 屏蔽重复提交表单

    2017-11-10 10:58:00
    读了城南的博客中的《屏蔽刷新提交后台》一文之后,对于解决屏蔽重复提交表单有了更好的认识。 对于重复提交表单个人觉得有以下解决方案: 1、利用Ajax提交,这样的自然而然的不会再涉及到重复提交表单。 2、利用前...

    读了城南的博客中的《屏蔽刷新提交后台》一文之后,对于解决屏蔽重复提交表单有了更好的认识。

    对于重复提交表单个人觉得有以下解决方案:
    1、利用Ajax提交,这样的自然而然的不会再涉及到重复提交表单。
    2、利用前后台标记,判断是否是重复提交-----------也就是城南博客中的方法。

    个人学习了城南博客中的方法,加以自己的理解,做了下修改。

    主要是的思想是:

      自己写一个类,去继承System.Web.UI.Page类,在此类中对Page类扩展。即:在页面下Render到页面时,发送一个到页面的Hide控件并增加一个Session。当再次访问时判断发回的控件的值和Session值是否一致,从而确定当前操作是否是有刷新导致的提交。

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    /// <summary>
    ///Basepage 的摘要说明
    /// </summary>
    public class Basepage:System.Web.UI.Page
    {
        private static string PAGE_REFRESH_TICKET_KEY = "__111111111111Key";
        private string PAGE_SESSION_REFRESH_TICKET_KEY = "__2222222222Key";
        protected override void OnPreRenderComplete(EventArgs e)
        {
            SynchroRefreshTicket();
            base.OnPreRenderComplete(e);
        }
    
        /// <summary>
        /// 同步页面和后台Session的票据
        /// </summary>
        private void SynchroRefreshTicket()
        {
    
            string strTicket = Guid.NewGuid().ToString();
            ClientScript.RegisterHiddenField(PAGE_REFRESH_TICKET_KEY, strTicket);
    
            Session[PAGE_SESSION_REFRESH_TICKET_KEY] = strTicket;
    
        }
    
        /// <summary>
        /// 比较HiddenField的票据和Session中存储的票据是否相同,如果不相同则为通过刷新的方式进行的提交
        /// </summary>
        protected bool IsRefreshed
        {
            get
            {
                if (Page.IsPostBack)
                {
                    if (string.Equals(Request.Form.Get(PAGE_REFRESH_TICKET_KEY), Session[PAGE_SESSION_REFRESH_TICKET_KEY]))
                    {
                        return false;
                    }
                    else
                    {
                        return true;
                    }
                }
                return false;
            }
        }
     
    }
    复制代码
    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class _Default :Basepage //继承自己写的类
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (this.IsRefreshed)
            {
                //如果是重复提交的话,就重新加载本页面
                //Response.Redirect(Request.Url.ToString());
                Response.Write("刷新");
            }
            else
            {
                Response.Write("提交");
            }
        }
    }
    复制代码
    复制代码
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
           <asp:Label ID="Label1" runat="server"></asp:Label>
            <asp:Button ID="Button1" runat="server" Text="Button" οnclick="Button1_Click" />
        </div>
        </form>
    </body>
    </html>
    复制代码

     



    本文转自武沛齐博客园博客,原文链接:http://www.cnblogs.com/wupeiqi/archive/2013/03/23/2977337.html,如需转载请自行联系原作者

    展开全文
  • 防止重复提交表单

    2017-05-05 15:39:00
    防止重复提交表单, 需要从两方面防范:前端和后端 一、前端(防止重复提交表单) <script type="text/javascript"> // 防止重复提交表单 var isCommitted = false; function checkPost() { if ...

    防止重复提交表单, 需要从两方面防范:前端和后端

     

    一、前端(防止重复提交表单)

    <script type="text/javascript">
        // 防止重复提交表单
        var isCommitted = false;
        function checkPost() {
            if (!isCommitted) {
                isCommitted = true;
                return true;
            }else {
                alert("不能重复提交表单,请等待片刻");
                return false;
            }
        }
    </script>

     

    二、后端(防止重复提交表单)

        protected static $form_token_key = "xxxr_pay_form_token";
    
        public function xxxx() { 
    
            // ……………………
            // 防止页面重复提交的token
            $form_token = md5(microtime(true));
            session(self::$form_token_key, $form_token);
            $this->assign('form_token', $form_token);
       
        }
    
        public function do_xxxx() {
    
             // ………………
      
            // 防止页面重复提交的token
            $form_token = I('post.form_token', '');
            $s_form_token = session(self::$form_token_key);
            session(self::$form_token_key, null);
            if (empty($form_token) || $s_form_token != $form_token) {
                Log::record('重复提交表单', 'DEBUG');
                $this->error('禁止重复提交订单', $success_url, 2);
                exit();
            }
    
        }

     

    转载于:https://www.cnblogs.com/wangyuman26/p/6813310.html

    展开全文
  • PHP防止重复提交表单

    2019-07-22 15:22:08
    * 不能忽视的一个限制是防止用户重复提交表单, * 因为有可能用户连续点击了提交按钮 * 或者是攻击恶意提交数据, * 那么我们在提交数据后的处理, * 如修改或添加到数据库时就会惹上麻烦。 * 那么如何规避这种...
    * 我们提交表单的时候,
    * 不能忽视的一个限制是防止用户重复提交表单,
    * 因为有可能用户连续点击了提交按钮
    * 或者是攻击恶意提交数据,
    * 那么我们在提交数据后的处理,
    * 如修改或添加到数据库时就会惹上麻烦。
    * 那么如何规避这种重复提交表单的现象出现呢?
    * 我们可以从很多方面入手,首先从前端做限制。
    * 第一:前端JavaScript在按钮被点击一次后禁用,即disabled,
    *      这个方法简单的防止了多次点击提交按钮,
    *      但是缺点是如果用户禁用了javascript脚本则失效。
    * 第二:我们可以在提交后做redirect页面重定向,
    *      即提交后跳转到新的页面,
    *      主要避免F5重复提交,
    *      但是也有不足之处。
    * 第三:数据库做唯一索引约束。
    * 第四:做session令牌验证。

    我们现在来了解下简单的利用session token来防止表单重复提交的方法。

    我们在表单中加一个input隐藏域,即type="hidden",其value值用来保存token值,当页面刷新的时候这个token值会变化,提交后判断token值是否正确,如果前台提交的token与后台不匹配,则认为是重复提交。

    <?php
    /**
     * Created by PhpStorm.
     * User: 52818
     * Date: 2019/7/22
     * Time: 14:18
     */
    
    /**
     * PHP简单例用token防止表单重复提交
     */
    session_start();
    header("Content-type:text/html;charset=gb2312");
    
    /*
     * 方法或函数命名规则
     * a。首字母小写;
     * b。多个单词间不使用间隔,除第一个单词外,其他单词首字母大写。
     * */
    function setToken(){
        $_SESSION['token'] = md5(microtime(true));
    }
    
    function validToken(){
        $return = $_REQUEST['token'] === $_SESSION['token'] ? true : false;
        //验证后,更新token。
        //这样第二次提交过来,老token和新token不一样,就可以检测是否是重复提交。
        setToken();
        return $return;
    }
    
    // 如果token为空则生成一个token
    if ( !isset($_SESSION['token']) || $_SESSION['token'] == '' ){
        setToken();
    }
    
    
    if ( isset($_POST['web']) ){
        if ( !validToken() ){
            echo "token error, 请不要重复提交!";
        } else {
            echo "成功提交,Value:" . $_POST['web'];
        }
    } else {
    ?>
        <form method="post" action="">
            <input type="hidden" name="token" value="<?php echo $_SESSION['token'] ?>">
            <input type="text" class="input" name="web" value="www.baidu.com">
            <input type="submit" class="btn" value="提交" />
        </form>
    
    
    <?php
    }
    ?>
    
    以上是一个简单的防止重复提交表单的例子,仅供参考。
    那么实际项目开发中,会对表单token做更复杂的处理,即我们说的令牌验证。
    可能要做的处理有:验证来源域,即来路,是否为外部提交;
    匹配要执行的动作,是添加、修改or删除;
    其次最重要的是构建token,token可以采用可逆的加密算法,
    尽可能复杂,因为明文还是不安全的。
    令牌验证的具体算法可以参考各大PHP框架,如ThinkPHP提供了很好的令牌验证功能。

     

     

    展开全文
  • php 防止重复提交表单

    千次阅读 2018-10-11 15:16:20
    利用PHP的Session功能,也能避免重复提交表单。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则...

    第一、使用Session处理

    利用PHP的Session功能,也能避免重复提交表单。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交,请见如下代码:

    1

    2

    3

    4

    5

    6

    <?php

        session_start();

        //根据当前SESSION生成随机数

        $code = mt_rand(0,1000000);

        $_SESSION['code'] = $code;

    ?>

    在页面表单上将随机数作为隐藏值进行传递,代码如下:

    1

    <input type="hidden" name="originator" value="<?=$code?>">

    在接收页面的PHP代码如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    <?php

    session_start();

    if(isset($_POST['originator'])) {

        if($_POST['originator'] == $_SESSION['code']){

            // 处理该表单的语句,省略

        }else{

            echo ‘请不要刷新本页面或重复提交表单!’;

        }

    }

    ?>

    第二:使用redis缓存

    // 是否有时效性
    $time = 300;//5分钟
    $key="code:{$uid}";
    $c = Fend_Cache::get($key);
    if (!empty($c) ) {
        echo "<script>alert('亲,领取太频繁!')</script>";
        echo "<script type='text/javascript'>window.location.href='/app/card/index'</script>";exit;
    }
    Fend_Cache::set($key,1,$time);

     

    展开全文
  • 思路:第一次提交表单的时候,处理完了后将一个标记存入缓存中,设置过期时间30秒,然后在最开始post请求时判断缓存里是否有标记,有则表示重复提交表单了(真是太聪明了) 安装:pip install flask-caching 配置 ...
  • session实现防止用户重复提交表单
  • 防止重复提交表单:重定向 //@RequestMapping(value = "/user/login",method = RequestMethod.POST) @PostMapping(value = "/user/login") public String login(@RequestParam("username") String username, @...
  • 防止用户通过后退按钮重复提交表单 <% response.Buffer=true response.Expires=0 response.ExpiresAbsolute=now()-1 response.CacheControl=”no-cache” %> response.Buffer=true的意思就是指明输出页面是否...
  • 我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦。 那么如何...
  • 我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦。 那么如何规避...
  • jQuery ajaxSubmit 自动重复提交表单问题解决个人笔记使用一、问题描述:当提交一次时一切看似正常,但是当提交第二次时,表单会进行两次提交,三次时会提交三次,以此类推。二、 解决后的效果如下图:三、准备工作...
  • 防止重复提交表单的方式 表单重复提交是在web开发中经常遇到的问题,顾名思义就是指同一个表单用户有意或无意的提交了两次,轻则引起系统数据出现重复,重则引起系统业务逻辑异常,导致系统数据错乱。 一、引起...
  • 防止重复提交表单的方法小编介绍过的不知道有多案了,如数据库判断,js验证,cookies验证及session验证,下面一起来看一个例子. 我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续...
  • 我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦。那么如何规避这...
  • 1.在客户端使用JS技术,禁止客户重复提交表单。但是这样会使一些不使用浏览器方式登陆的人比如使用底层通信来攻击你的服务器 2.在服务器端进行验证 Struts2设计了token标签来进行验证,在使用token时要注意,你...
  • 防止重复提交表单的方法有很多,包括数据库判断,js验证,cookies验证及session验证等,具体使用方法如下: 使用JS让按钮在点击一次后禁用(disable)。采用这种方法可以防止多次点击的发生,实现方式较简单。 ...
  • 我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦。 那么如何规避...
  • 防止重复提交表单 $c =md5(serialize($this-&gt;request-&gt;request())); $find = session($c); if($find){ if($find['expire']+2-time()&gt;=0){ return false; } } session($c,array('expire'=&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,108
精华内容 2,443
关键字:

重复提交表单