搜尋
首頁php教程php手册页面防重复提交方法总结

有时候我们的程序执行比较慢,而且我们页面也不怎么友好,没什么提示信息。操作人员以为没有点击提交按钮,就会再一次点击提交。这会导致很多问题出现。下面介绍三种防重复提交的方法。

 

1、提交按钮置disabled

 

      当用户提交后,立即把按钮置为不可用状态。这种用js来实现。

 

         提交前

 

        $("#submit").attr('disabled','true');

         $("#submit").val("正在提交,请稍等");

 

 

 

       ....................................................................................

 

    执行后,把按钮置为原来状态

 

    

 

      $('#submit ').removeAttr('disabled');

      $("#submit ").val("确定提交");

 

 

 

2、过期时间法

 

    思路:当用户提交按钮后生成一个token(每次业务提交token 为唯一值)存入session,并设置过期时间。当用户再此提交时,检测token是否一致且是否过期,若一致且没有过期,则认为提交了二次。当程序执行出错的时候,则需要清除存入session的值。见下面程序

 

 

 

function checkRepeatSubmit($uniqueid = '', $expire = 30) {

 

        $uniqueid = empty($uniqueid) ? Yii::app()->user->id . Yii::app()->user->name . Yii::app()->user->mihome : $uniqueid;

        $token = md5("wms_check_repeat" . $uniqueid);

 

        $time = time();

 

        if (isset($_SESSION['token']) && !empty($_SESSION['token']) && $_SESSION['token'] == $token && ($time - $_SESSION['expire_time']

 

            return false;

        } else {

 

            $_SESSION['token'] = $token;

            $_SESSION['expire_time'] = $time;

            //session写入的时候会等待整个页面加载完成,用此函数可以立即写入

            session_write_close();

            return true;

        }

    }

 

 //删除存入的值

 

   function cancelRepeatSubmit() {

 

        unset($_SESSION['token']);

        unset($_SESSION['expire_time']);

    }

 

 

 

3、token销毁法

 

思路:当页面进行加装的时候生成token,存在session中,并写在表单里。表单提交的时候随表单提交给服务端,服务端通过session存入的token与token进行比较,若相等,则销毁seesion中存入的token,当页面遭到二次提交的时候,由于存入session中的token不存在而报错。下面是代码

 

 /**

     * 第二种方案

     * 1、产生token,并存在session中

     * 2、随页面生成

     * 3、提交页面与session进行比对,成功后对session进行销毁

     * 4、第二次提交则不存在这个值而报错

     * @param type $uniqueid

     * @return type

     */

    function createToken($uniqueid) {

 

        $uniqueid = empty($uniqueid) ? Yii::app()->user->id . Yii::app()->user->name . Yii::app()->user->mihome : $uniqueid;

        $token = md5("wms_check2_repeat" . $uniqueid);

        $_SESSION['form_token'] = $token;

 

       ​session_write_close();

        return $token;

    }

 

    function checkToken($token) {

 

        if (!isset($_SESSION['form_token']) empty($_SESSION['form_token']) $_SESSION['form_token'] != $token) {

            return false;

        } else {

            unset($_SESSION['form_token']);

            return true;

        }

    }

 

 

 

上面总结了三种方法,个人感觉第一种跟第二种方法配合着用会达到更好的效果。第二种方法与第三种方法个人感觉第三种要有优势点。

 

第二种与第三种方法都是把token写在session中,这种方法好处是节省存储空间,但坏处是由于session是需要整个页面加载完毕才能写入,故当整个页面加载比较慢,且用户点击多次提交,可能由于session还没写入导致系统还认为是第一次输入。导致验证不起作用。好在php函数提供了一个牛逼的函数。   session_write_close(),可以立即把session写入,不用等待页面加载完成。同事对于session的存入也有很多种方法可以选择,可以存在redis,memcache或者数据库都可以的。

 



陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。