表單提交有時可能會無意中連續多次觸發,從而導致不良行為和數據不一致。這種情況可能是由於多種因素造成的,例如多次點擊按鈕或表單處理速度慢。 PHP 提供了防止多次提交的技術,確保資料完整性。
為了防止多次提交,一種廣泛使用的方法是利用每次顯示表單時產生的令牌。然後,該令牌與表單一起提交並在伺服器端進行驗證。這種方法的關鍵好處在於它有可能減輕 CSRF(跨站請求偽造)攻擊和重播攻擊。
下面的範例示範如何建立一個獨特的每個表單顯示的令牌,以及表單提交時的驗證。
<?php session_start(); /** * Generates a unique token for the form * @return string The token */ function getToken(){ $token = sha1(mt_rand()); if(!isset($_SESSION['tokens'])){ $_SESSION['tokens'] = array($token => 1); } else{ $_SESSION['tokens'][$token] = 1; } return $token; } /** * Validates the token and removes it from the list of valid tokens * @param string $token The token * @return bool Validation status */ function isTokenValid($token){ if(!empty($_SESSION['tokens'][$token])){ unset($_SESSION['tokens'][$token]); return true; } return false; } // Check if a form has been submitted $postedToken = filter_input(INPUT_POST, 'token'); if(!empty($postedToken)){ if(isTokenValid($postedToken)){ // Process form } else{ // Handle error } } // Get a token for the currently displayed form $token = getToken(); ?> <form method="post"> <fieldset> <input type="hidden" name="token" value="<?php echo $token; ?>"/> <!-- Form content --> </fieldset> </form>
將基於令牌的方法與重定向相結合,可以確保正確的向後和向前導航行為,從而增強用戶體驗。透過實現POST/重定向/GET設計模式,可以防止使用者點擊後退按鈕或刷新頁面時意外重新提交。
以上是如何防止PHP中的多個表單提交?的詳細內容。更多資訊請關注PHP中文網其他相關文章!