Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Fahami prinsip anti-goncang dan anti-penyerahan semula dalam PHP

Fahami prinsip anti-goncang dan anti-penyerahan semula dalam PHP

WBOY
WBOYasal
2023-10-12 09:15:53708semak imbas

理解 PHP 中的防抖和防重复提交的原理

PHP ialah bahasa pengaturcaraan yang digunakan secara meluas untuk pembangunan bahagian pelayan dengan ciri dan fleksibiliti yang berkuasa. Dalam perkembangan sebenar, kita sering menghadapi senario di mana kita perlu menghalang penyerahan berulang atau anti-goncang. Artikel ini akan meneroka prinsip anti-goncang dan anti-penyerahan semula dalam PHP dan memberikan contoh kod khusus.

1. Prinsip anti goncang

Anti goncang merujuk kepada teknologi yang menghalang pencetus berterusan Ia sering digunakan untuk mengoptimumkan pengalaman pengguna dan mengurangkan permintaan atau operasi yang tidak perlu. Dalam PHP, kami boleh melaksanakan anti-goncang melalui panggilan JavaScript atau Ajax.

  1. Prinsip

Prinsip anti goncang sangat mudah, iaitu dalam tempoh masa tertentu, pelbagai peristiwa pencetus hanya akan dilaksanakan pada kali terakhir. Sebagai contoh, fungsi carian masa nyata kotak carian akan mencetuskan permintaan carian setiap kali pengguna memasukkan surat permintaan yang kerap sedemikian akan memberi banyak tekanan pada pelayan dan pengalaman pengguna tidak akan baik. Melalui teknologi anti-goncang, kami boleh menetapkan ambang masa dan hanya menghantar permintaan selepas pengguna berhenti memasukkan untuk tempoh masa untuk mengelakkan permintaan yang kerap.

  1. Contoh Kod

Berikut ialah contoh kod PHP mudah yang menunjukkan cara menggunakan teknologi nyahlantun:

<?php
function debounce($callback, $delay) {
    static $lastCallTime = 0;
    
    if (time() - $lastCallTime < $delay) {
        return;
    }
    
    $lastCallTime = time();
    call_user_func($callback);
}

function search() {
    // 假设这里是搜索功能的代码
    // ...
    echo "搜索结果";
}

// 假设这里是输入框的事件处理代码
input.addEventListener('input', function() {
    debounce(search, 500);
});
?>

Dalam kod di atas, fungsi debounce menerima fungsi panggil balik dan masa tunda, The fungsi anti goncang dilaksanakan dengan membandingkan perbezaan antara masa semasa dan masa pencetus terakhir. Setiap kali peristiwa dicetuskan, mula-mula tentukan sama ada perbezaan masa antara dua pencetus lebih besar daripada masa tunda yang ditetapkan. Jika ya, laksanakan fungsi panggil balik. debounce 函数接受一个回调函数和延迟时间,通过比较当前时间和上次触发时间的差值来实现防抖功能。每次触发事件时,首先判断两次触发的时间差是否大于设定的延迟时间,如果是,则执行回调函数。

二、防重复提交的原理

防重复提交是指在提交表单或者请求时,阻止用户多次提交相同的数据,保证数据的唯一性和正确性。在 PHP 中,我们可以使用一些技术手段来防止用户的重复提交。

  1. 原理

防止重复提交的常见原理是使用 Token 或者 Session 进行验证。当用户提交表单时,服务器会生成一个唯一的 Token,并将其存储到 Session 中或者作为表单隐藏字段返回给客户端。服务器在接收到用户提交的请求时,首先验证 Token 的有效性,如果该 Token 已经使用过或者不符合规则,就拒绝处理。通过这种方式,我们可以防止用户重复提交相同的请求。

  1. 代码示例

下面是一个简单的 PHP 代码示例,演示如何使用 Token 技术防止重复提交:

<?php
session_start(); // 开启 Session

function generateToken() {
    $token = md5(uniqid(rand(), true));
    $_SESSION['token'] = $token;
    return $token;
}

function checkToken($token) {
    if (!isset($_SESSION['token']) || $_SESSION['token'] !== $token) {
        return false;
    }
    $_SESSION['token'] = null; // 使用过的 Token 置空,避免重复使用
    return true;
}

function submitForm() {
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        return;
    }
    
    $token = isset($_POST['token']) ? $_POST['token'] : '';
    if (checkToken($token)) {
        // 处理表单提交的逻辑
        // ...
        echo "表单提交成功";
    } else {
        echo "表单重复提交";
    }
}

// 生成 Token 并放入隐藏字段
$token = generateToken();
echo "<form method='post' action=''>";
echo "<input type='hidden' name='token' value='$token'>";
echo "<input type='submit' value='提交'>";
echo "</form>";

submitForm();
?>

在上面的代码中,generateToken 函数用于生成一个唯一的 Token,并将其存储到 Session 中。checkToken

2. Prinsip penyerahan anti-pendua

Penyerahan anti-pendua bermaksud menghalang pengguna daripada menghantar data yang sama beberapa kali apabila menghantar borang atau permintaan untuk memastikan keunikan dan ketepatan data. Dalam PHP, kami boleh menggunakan beberapa cara teknikal untuk menghalang pengguna daripada penyerahan berulang.

🎜Prinsip🎜🎜🎜Prinsip biasa untuk mengelakkan penyerahan berulang adalah menggunakan Token atau Sesi untuk pengesahan. Apabila pengguna menyerahkan borang, pelayan menjana Token unik dan menyimpannya dalam Sesi atau mengembalikannya kepada klien sebagai medan tersembunyi borang. Apabila pelayan menerima permintaan yang dikemukakan oleh pengguna, ia terlebih dahulu mengesahkan kesahihan Token Jika Token telah digunakan atau tidak mematuhi peraturan, ia enggan memprosesnya. Dengan cara ini kami menghalang pengguna daripada menyerahkan permintaan yang sama berulang kali. 🎜🎜🎜Contoh Kod🎜🎜🎜Berikut ialah contoh kod PHP mudah yang menunjukkan cara menggunakan teknologi Token untuk mengelakkan penyerahan pendua: 🎜rrreee🎜Dalam kod di atas, fungsi generateToken digunakan untuk menjana Token unik dan simpannya dalam Sesi. Fungsi checkToken digunakan untuk mengesahkan sama ada Token yang diserahkan adalah sah. Apabila borang diserahkan, Token mula-mula dijana dan diletakkan dalam medan tersembunyi, dan kemudian kesahihan Token disahkan pada bahagian pelayan. 🎜🎜Ringkasan: 🎜🎜Melalui contoh kod di atas, kita dapat memahami dengan jelas prinsip dan kaedah pelaksanaan penyerahan anti-goncang dan anti-pendua dalam PHP. Penyerahan anti goncang dan anti pendua adalah keperluan biasa dalam pembangunan sebenar Cara teknikal yang munasabah boleh meningkatkan pengalaman pengguna dan melindungi keunikan dan ketepatan data. Dalam aplikasi praktikal, kita boleh memilih cara teknikal anti-goncang dan anti-penyerahan semula yang sesuai mengikut senario tertentu. 🎜

Atas ialah kandungan terperinci Fahami prinsip anti-goncang dan anti-penyerahan semula 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