zoukankan      html  css  js  c++  java
  • yii防止延迟用户多次点击按钮重复提交数据

    是不是被用户的行为所困扰?

    一、

    一个表单用户点击提交按钮了N次,这也导致了数据提交了N次。

    为了此受到了测试的欺辱,受到了老板的批评?

    不用怕,它就是来拯救你的。

    第一步:打开命令行,敲入 composer require lightyii2-lock-form=~1.0.0

    第二步:上个厕所

    第三步:如果你的项目中已经使用了 yii2-bootstrap, 那么好,只需要在的你的 AppAsset 「whatever, 只要你全局依赖的就成」

    轻轻的敲入:

    
    'depends' => [
        //other depends
        'lightwidgetsLockBsFormAsset'
    ]
    

    如果你没使用 yii2-bootstrap 也能满足您:你只需要将 lightwidgetsLockBsFormAsset 替换成 lightwidgetsLockFormAsset.

    还需要做什么?

    如果还需要做的话,那就是定制一下 Lock 用语,

    
    Html::submitButton('提交', ['data-loading-text' => '正在提交数据, 不让你点,哼'])
    

    说了这么多,东西在那儿?

    https://github.com/lichunqiang/yii2-lock-form

    重要的事情要说三遍:star,star, star, little star, 一闪一闪亮晶晶。

    二、

    表单提交时,由于网速等原因,会出现重复提交的现象。

    一、从前端的角度:增加遮罩
    二、从后端的角度:使用session。
    /可复用代码

    $session = Yii::app()->session;
    
    
            $user_id = $this->user->id;
            $sessionKey = $user_id.'_is_sending';
    
    
    
    
            if(isset($session[$sessionKey])){
                $first_submit_time = $session[$sessionKey];
                $current_time      = time();
                if($current_time - $first_submit_time < 10){
                    $session[$sessionKey] = $current_time;
                    $this->response(array('status'=>1, 'msg'=>'不能在10秒钟内连续发送两次。'));
                }else{
                    unset($session[$sessionKey]);//超过限制时间,释放session";  
                }
            }
    
    
    
    
            //第一次点击确认按钮时执行  
            if(!isset($session[$sessionKey])){
                $session[$sessionKey] = time();
            }
  • 相关阅读:
    矩阵乘法与邻接矩阵
    矩阵加速 学习笔记
    P5596 【XR-4】题
    P1842 奶牛玩杂技
    CF449B Jzzhu and Cities
    小球与盒子
    [JZOJ5279]香港记者题解--最短路图
    [学习笔记]二分图匹配与匈牙利算法
    [NOIP2018模拟赛10.25]瞎搞报告
    luogu2657-Windy数题解--数位DP
  • 原文地址:https://www.cnblogs.com/myon/p/6636752.html
Copyright © 2011-2022 走看看