Rumah > Artikel > pembangunan bahagian belakang > Penyerahan anti-goncang dan anti-pendua: kemahiran penting dalam pembangunan PHP
Penyampaian anti goncang dan anti pendua: kemahiran penting dalam pembangunan PHP
Dengan perkembangan Internet, aplikasi Web telah menjadi bahagian yang amat diperlukan dalam kehidupan orang ramai. Dalam pembangunan PHP, penyerahan anti-goncang dan anti-berulang adalah salah satu kemahiran yang sangat penting. Artikel ini akan memperkenalkan konsep dan prinsip penyerahan anti-goncang dan anti-pendua, dan memberikan contoh kod khusus.
1. Konsep dan prinsip anti goncang
Anti goncang ialah cara teknikal yang biasa digunakan untuk mengurangkan bilangan pelaksanaan acara yang sering dicetuskan. Ringkasnya, fungsi anti-goncang adalah untuk hanya melaksanakan peristiwa tercetus terakhir dalam tempoh masa tertentu, sambil mengabaikan peristiwa pencetus sebelumnya.
Prinsip anti goncang ialah menggunakan pemasa untuk melengahkan fungsi melaksanakan sesuatu acara. Apabila acara dicetuskan, pemasa akan ditetapkan dalam julat masa pemasa, jika acara dicetuskan semula, masa akan dimasa semula jika acara tidak dicetuskan lagi selepas pemasa tamat, yang terakhir dicetuskan acara akan dilaksanakan.
Berikut ialah contoh kod PHP mudah yang melaksanakan fungsi anti goncang:
function debounce($callback, $delay) { $timer = null; return function () use ($callback, $delay, &$timer) { if ($timer) { clearTimeout($timer); } $args = func_get_args(); $timer = setTimeout(function () use ($callback, $args) { call_user_func_array($callback, $args); }, $delay); }; }
Contoh penggunaan:
function search($keyword) { // 模拟搜索操作 echo "搜索关键词:$keyword "; } $debounceSearch = debounce('search', 1000); // 设置延迟为 1 秒 $debounceSearch('PHP'); // 触发搜索关键词:PHP $debounceSearch('JavaScript'); // 不触发 $debounceSearch('Python'); // 不触发
Dalam contoh di atas, fungsi debounceSearch dijana dengan memanggil fungsi nyahpantun, dan masa tunda ditetapkan kepada 1 saat. Setiap kali fungsi debounceSearch dipanggil, jika terdapat panggilan baharu dalam masa 1 saat, masa akan ditetapkan semula jika tiada panggilan baharu dalam masa 1 saat, panggilan terakhir akan dilaksanakan.
2. Konsep dan prinsip penyerahan anti-pendua
Penyerahan anti-pendua merujuk kepada menghalang pengguna daripada menghantar permintaan yang sama beberapa kali semasa operasi seperti penyerahan borang. Penyerahan berulang boleh menyebabkan keabnormalan pada data bahagian belakang dan juga menyebabkan tekanan yang tidak perlu pada sistem.
Prinsip menghalang penyerahan pendua adalah untuk menjana pengecam unik untuk setiap permintaan sebelum menyerahkannya. Selepas menerima permintaan, bahagian belakang akan menyemak sama ada pengecam telah digunakan. Jika ia telah digunakan, ia akan dianggap sebagai penyerahan pendua dan enggan memproses jika ia belum digunakan, ia akan terus memproses permintaan dan menandakan pengecam seperti yang digunakan.
Berikut ialah contoh kod PHP mudah yang melaksanakan fungsi menghalang penyerahan pendua:
function preventDuplicateSubmit() { $token = md5(uniqid(rand(), true)); $_SESSION['token'] = $token; return $token; } function checkDuplicateSubmit() { $token = isset($_SESSION['token']) ? $_SESSION['token'] : ''; unset($_SESSION['token']); return !empty($token) && $token === $_POST['token']; } // 处理表单提交请求 function handleFormSubmit() { if (checkDuplicateSubmit()) { echo "请勿重复提交表单"; return; } // 处理正常请求 echo "表单提交成功"; } // 生成表单 function generateForm() { $token = preventDuplicateSubmit(); echo <<<HTML <form method="post" action="submit.php"> <input type="hidden" name="token" value="$token"> <!-- 表单其他字段 --> <button type="submit">提交</button> </form> HTML; } // 页面中显示表单并处理提交 generateForm(); handleFormSubmit();
Dalam contoh di atas, pengecam unik dijana melalui fungsi preventDuplicateSubmit dan disimpan dalam sesi. Apabila borang diserahkan, pengecam akan ditambahkan pada permintaan sebagai medan tersembunyi (token), dan ia akan diperiksa sama ada token yang diminta konsisten dengan yang disimpan dalam sesi.
Melalui teknik anti goncang dan anti penyerahan semula di atas, pengalaman pengguna dan keselamatan aplikasi web boleh dipertingkatkan. Dalam pembangunan sebenar, mengikut keperluan khusus dan senario perniagaan, pelarasan dan pengembangan yang sesuai boleh dibuat untuk senario yang berbeza untuk memenuhi keperluan sebenar.
Walaupun contoh kod khusus disediakan di atas, adalah disyorkan untuk membaca dokumentasi dengan teliti dan menguji sebelum digunakan untuk memastikan kestabilan dan keselamatan kod.
Atas ialah kandungan terperinci Penyerahan anti-goncang dan anti-pendua: kemahiran penting dalam pembangunan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!