首頁 >後端開發 >PHP問題 >php防止表單重複提交的方法

php防止表單重複提交的方法

王林
王林原創
2019-12-05 11:14:512977瀏覽

php防止表單重複提交的方法

Token,就是令牌,最大的特點就是隨機性,不可預測。

Token一般用在兩個地方-防止表單重複提交、anti csrf攻擊(跨網站請求偽造)。

兩者在原理上都是透過session token來實現的。當客戶端請求頁面時,伺服器會產生隨機數Token,並且將Token放置到session當中,然後將Token發給客戶端(一般透過建構hidden表單)。下次客戶端提交請求時,Token會隨著表單一起提交到伺服器端。

如果套用到“防止表單重複提交”,伺服器端第一次驗證相同過後,會將session中的Token值更新下,若使用者重複提交,第二次的驗證判斷將會失敗,因為使用者提交的表單中的Token沒變,但伺服器端session中Token已經改變了。

線上影片教學分享:php影片教學

php表單加入Token防止重複提交

##原理在於產生一個隨機字串放在session裡,提交表單後來驗證這個字串,可以做到防止他人自己寫form來欺騙提交,重複提交或雙擊提交。

簡單實作(僅供參考):


<?php
/*
* PHP简单利用token防止表单重复提交

* 此处理方法纯粹是为了给初学者参考
*/

session_start();

function set_token() {

  $_SESSION[&#39;token&#39;] = md5(microtime(true));

}

function valid_token() {

  $return = $_REQUEST[&#39;token&#39;] === $_SESSION[&#39;token&#39;] ? true : false;

  set_token();

  return $return;

}

//如果token为空则生成一个token

if(!isset($_SESSION[&#39;token&#39;]) || $_SESSION[&#39;token&#39;]==&#39;&#39;) {

  set_token();

}

if(isset($_POST[&#39;test&#39;])){

  if(!valid_token()){

    echo "token error";

  }else{

    echo &#39;成功提交,Value:&#39;.$_POST[&#39;test&#39;];

  }

}

?>

<form method="post" action="">

  <input type="hidden" name="token" value="<?php echo $_SESSION[&#39;token&#39;]?>">

  <input type="text" name="test" value="Default">

  <input type="submit" value="提交" />

</form>

相關文章教學推薦:

php教學

以上是php防止表單重複提交的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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