1. 程式人生 > >PHP防止表單重複提交方法

PHP防止表單重複提交方法

下面的情況就會導致表單重複提交:

      點選提交按鈕兩次。

      點選重新整理按鈕。

      使用瀏覽器後退按鈕重複之前的操作,導致重複提交表單。

      使用瀏覽器歷史記錄重複提交表單。

      瀏覽器重複的HTTP請求。

      網頁被惡意重新整理。

下面是幾種解決辦法:

一:利用js設定按鈕點選後變成灰色

<form name=form1 method=”POST” action=”/” target=_blank>

<p>

<input type=”text” name=”T1″ size=”20″>

<input type=”button” value=”提交” onclick=”javascript:{this.disabled=true;document.form1.submit();}”>

</p>

</form>

點選完按鈕之後變成灰色就不能點選了,使用者需要再次提交表單的話就要重新整理頁面之後重新填寫資料再提交了。

二:利用session

session中放一個特殊標誌。當表單頁面被請求時,生成一個特殊的字元標誌串,存在session中,同時放在表單的隱藏域裡。接受處理表單資料時,檢查標識字串是否存在,並立即從session中刪除它,然後正常處理資料。

如果發現表單提交裡沒有有效的標誌串,這說明表單已經被提交過了,忽略這次提交。

這使你的web應用有了更高階的XSRF保護

載入提交的頁面時候,生成一個隨機數,

$code = mt_rand(0,1000000);

儲存在表單的隱藏輸入框中:

< input type=”hidden” name=”code” value=””>

在接收頁面的PHP程式碼如下:

<?php

session_start();

if(isset($_POST[‘code'])) {

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

// 重複提交表單了

}else{

$_SESSION[‘code'] =$_POST[‘code']; //儲存code

}

}?>

三:利用cookies

原理和session差不多,但是cookies一旦使用者瀏覽器禁用cookies,這功能就失效了

if(isset($_POST[‘submit'])){

setcookie(“tempcookie”,””,time()+30);

header(“Location:”.$_SERVER[PHP_SELF]);exit();

}

if(isset($_COOKIE[“tempcookie”])){

setcookie(“tempcookie”,””,0);echo “您已經提交過表單”;

}

四:利用header函式跳轉

一旦使用者點選提交按鈕,處理完資料後跳到其他頁面

if (isset($_POST[‘submit'])) {

header(‘location:success.php');//處理資料後,轉向到其他頁面

}

五:利用資料庫來新增約束

直接在資料庫裡新增唯一約束或建立唯一索引,一旦發現使用者重複提交了,直接丟擲警告或者提示,或者只處理第一次提交的資料,這是最直接有效的方法,要求前期的資料庫設計和架構要考慮周全.

六:Post/Redirect/Get模式。

在提交後執行頁面重定向,這就是所謂的Post-Redirect-Get (PRG)模式。簡言之,當用戶提交了表單後,你去執行一個客戶端的重定向,轉到提交成功資訊頁面。

if (isset($_POST[‘action']) && $_POST[‘action'] == ‘submitted') {

//處理資料,如插入資料後,立即轉向到其他頁面

header('location:submits_success.php');

}

相關推薦

PHP防止重複提交方法

下面的情況就會導致表單重複提交:       點選提交按鈕兩次。       點選重新整理按鈕。       使用瀏覽器後退按鈕重複之前的操作,導致重複提交表單。       使用瀏覽器歷史記錄重複提交表單。       瀏覽器重複的HTTP請求。      

防止重複提交的幾種方法總結

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/Warpar/article/details/72917924 1、JavaScript防止表單重複提交(主要用於網路延遲情況下使用者點選多次submit按鈕導致表單重複提

防止重複提交的4種方法

1.背景與介紹: 平時開發的專案中可能會出現下面這些情況: 由於使用者誤操作,多次點選表單提交按鈕。 由於網速等原因造成頁面卡頓,使用者重複重新整理提交頁面。 黑客或惡意使用者使用postman等工具重複惡意提交表單(攻擊網站)。 這些情況都會導致表單重複提交,造成資料重複,增加伺服器負載,嚴重甚至會造成

防止重複提交PHP生成token並自動更新

PHP生成token並自動更新。 在業務中,經常會遇到重複提交問題。token是一種解決表單重複提交的思路,token 原理大致為: 1:顯示錶單的那個 action 中使用 makeToken() 生成一個隨機的 token值,稱作 requestToken ,並存放在

jq提交時 禁用提交按鈕 防止重複提交 jq方法

防止表單重複提交 function(event,options){ $("#submit_login").attr({"disabled":"disabled"}); var needtime =

利用session防止重複提交

使用者在提交表單的過程中,由於網路等原因,可能重複點選提交按鈕,向資料庫重複寫入或者讀取資料,為了防止這種情況發生。   解決方式: 1.客戶端防表單重複提交,在前端使用javascript限制。但是在前端並不能完全限制,比如下網頁原始碼更改,重複重新整理等。 2.服務端防

Java 使用Token令牌防止重複提交

Token驗證詳解 參考來源:https://blog.csdn.net/woshihaiyong168/article/details/52857479 使用Token令牌防止表單重複提交 參考來源:https://blog.csdn.net/cuiyaoqiang/article/d

用session防止重複提交

session案例1:防止表單重複提交   原理:     1,表單頁面由servlet程式生成,servlet為每次產生的表單頁面分配一個唯一的隨機標識號,並在FORM表單的一個隱藏欄位中設定這個標識號,同時在當前使用者的Session域中儲存這個標識號。

struts2-註解&防止重複提交

註解: 註解沒有分號 註解首字母是大寫,因為註解與類、介面是同一級的。一個註解後臺對應一個@interface類 同一語法單元,同一註解只能使用一次 在註解與語法單元間可以隔若干空行、註釋等非程式碼內容 在struts2中使用註解,主要完成對Act

防止重複提交---筆記

1. 防止表單重複提交 1.在使用者訪問頁面(設為頁面A)時session設定一個屬性(設為check) 值為 md5(當前時間)設為checkvalue, 且在表單中設定隱藏域 value為checkvalue 2.當用戶提交 在servlet裡檢測se

自定義註解攔截器,防止重複提交

1.自定義註解 package com.paotui.util; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import ja

防止重複提交

問題:什麼是表單重複提交?                     regist.jsp----->RegistServlet         表單重複提交 危害: 刷票、 重複註冊、帶來伺服器訪問壓力(拒絕服務)                  解決方案:     

Jsp 防止重複提交幾種方案

SP避免Form重複提交的三種方案  1) javascript ,設定一個變數,只允許提交一次。    <script language="javascript">    var checksubmitflg = false;    function

session案例:防止重複提交、一次性校驗碼

session案例1:防止表單重複提交 原理: 1,表單頁面由servlet程式生成,servlet為每次產生的表單頁面分配一個唯一的隨機標識號,並在FORM表單的一個隱藏欄位中設定這個標識號,同時在當前使用者的Session域中儲存這個標識號。 2,當用戶提交FOR

laravel中防止重複提交的綜合解決方案

怎樣防止表單重複提交,通過搜尋引擎能搜到很多結果,但很零散,系統性不強,正好前幾天做了這個功能,決定記錄下來。 根據資料流向的過程,分別在三個“點”控制表單的重複提交,如下: 第一,使用者觸發submit時,前端js控制提交按鈕的狀態,使用者觸發提交即設

Spring MVC攔截器+註解方式實現防止重複提交

表單重複提交是在多使用者Web應用中最常見、帶來很多麻煩的一個問題。有很多的應用場景都會遇到重複提交問題,比如: 1.點選提交按鈕兩次。2.點選重新整理按鈕。3.使用瀏覽器後退按鈕重複之前的操作,導致重複提交表單。4.使用瀏覽器歷史記錄重複提交表單。5.瀏覽器重複的HTTP

Struts2中防止重複提交的兩種方式

防止表單重複提交,這是個很重要的知識點,而且很有用。當用戶提交了一個表單,此時,位址列顯示的是處理這個表單的Action的地址,若此時重新整理,則會重新發送一次表單資料,即又進行了一次提交,若這個Action是用來處理使用者註冊的,那麼重複提交會再一次向資料庫中插入之前已

SSH框架之Struts的常用技術——資料回顯、防止重複提交

Struts2的常用三大技術: 1、資料回顯 2、模型驅動 3、防止表單重複提交 一、資料回顯: 1、資料回顯,必須要用struts標籤! 2、程式碼講解: 1)Action: //

防止重複提交的幾種策略

表單重複提交在客戶端和伺服器端都會引發一些問題,一方面有些瀏覽器會彈出確認是否確認重新提交表單,另一方面伺服器端也可能會重複新增資料。 在瀏覽器端,當用戶點選提交一個表單,而伺服器沒有對提交做重定向,當用戶輸入資訊有誤提交後依然返回的是提交的頁面,或者在同一個頁面顯示提交成

session token 防止重複提交

本文正是通過使用session以及在session中加入token,來驗證同一個操作人員是否進行了併發重複的請求,在後一個請求到來時,使用session中的token驗證請求中的token是否一致,當不一致時,被認為是重複提交,將不准許通過。     整個流程可以由如下