Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencegah Penyerahan Borang Berbilang dalam PHP?

Bagaimana untuk Mencegah Penyerahan Borang Berbilang dalam PHP?

Susan Sarandon
Susan Sarandonasal
2024-11-10 06:43:02530semak imbas

How to Prevent Multiple Form Submissions in PHP?

Melawan Penyerahan Berbilang Borang dalam PHP pada Berbilang Klik

Penyerahan borang kadangkala boleh dicetuskan secara tidak sengaja beberapa kali berturut-turut, yang membawa kepada tingkah laku yang tidak diingini dan ketidakkonsistenan data. Keadaan ini boleh timbul disebabkan oleh pelbagai faktor, seperti butang klik berbilang atau pemprosesan bentuk perlahan. PHP menyediakan teknik untuk menghalang berbilang penyerahan sedemikian, memastikan integriti data.

Mencegah Penyerahan Berbilang Borang

Untuk memerangi berbilang penyerahan, pendekatan yang digunakan secara meluas melibatkan penggunaan token yang dijana setiap kali borang dipaparkan. Token ini kemudiannya diserahkan bersama borang dan disahkan pada bahagian pelayan. Faedah penting pendekatan ini terletak pada potensinya untuk mengurangkan kedua-dua serangan CSRF (Cross-Site Request Forgery) dan serangan semula.

Contoh Praktikal

Contoh di bawah menunjukkan penciptaan yang unik token untuk setiap paparan borang, bersama-sama dengan pengesahannya semasa penyerahan borang.

<?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>

Mempertingkatkan Pengguna Pengalaman dengan Redirection

Menggabungkan pendekatan berasaskan token dengan ubah hala meningkatkan pengalaman pengguna dengan memastikan tingkah laku navigasi ke belakang dan ke hadapan yang betul. Dengan melaksanakan corak reka bentuk POST / ubah hala / GET, anda boleh menghalang penyerahan semula secara tidak sengaja apabila pengguna mengklik butang belakang atau memuat semula halaman.

Atas ialah kandungan terperinci Bagaimana untuk Mencegah Penyerahan Borang Berbilang dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn