yii防止延迟用户多次点击按钮重复提交数据

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

一、

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

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

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

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

第二步:上个厕所

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

轻轻的敲入:


'depends' => [
//other depends
'light\widgets\LockBsFormAsset'
]

如果你没使用 yii2-bootstrap 也能满足您:你只需要将 light\widgets\LockBsFormAsset 替换成 light\widgets\LockFormAsset.

还需要做什么?

如果还需要做的话,那就是定制一下 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();
        }
上一篇:sql openxml sp_xml_preparedocument xml 中文乱码


下一篇:如何用一张图片代替 'input:file' 上传本地文件??