91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用php怎么防止頁面重復提交

發布時間:2021-03-05 16:59:53 來源:億速云 閱讀:176 作者:Leah 欄目:開發技術

使用php怎么防止頁面重復提交?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

php有什么用

php是一個嵌套的縮寫名稱,是英文超級文本預處理語言,它的語法混合了C、Java、Perl以及php自創新的語法,主要用來做網站開發,許多小型網站都用php開發,因為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'] < $expire)) {

            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或者數據庫都可以的。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

凤山县| 华蓥市| 中江县| 阿拉善盟| 安达市| 黔西| 霍林郭勒市| 内丘县| 塔城市| 永川市| 开原市| 龙川县| 吉木乃县| 那坡县| 大同市| 许昌市| 灵武市| 遂昌县| 夏邑县| 电白县| 宕昌县| 梁河县| 石景山区| 翁牛特旗| 佛山市| 顺昌县| 建阳市| 辽宁省| 娄烦县| 华坪县| 百色市| 郑州市| 灯塔市| 泾川县| 西峡县| 慈溪市| 微博| 广汉市| 怀安县| 仁寿县| 休宁县|