Verstehen Sie die Prinzipien von Anti-Shaking und Anti-Resubmission in PHP

WBOY
Freigeben: 2023-10-12 09:22:02
Original
692 Leute haben es durchsucht

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

PHP ist eine weit verbreitete Programmiersprache für die serverseitige Entwicklung mit leistungsstarken Funktionen und Flexibilität. In der tatsächlichen Entwicklung stoßen wir häufig auf Szenarien, in denen wir wiederholte Übermittlungen oder Anti-Shake verhindern müssen. In diesem Artikel werden die Prinzipien von Anti-Shaking und Anti-Resubmission in PHP untersucht und spezifische Codebeispiele bereitgestellt.

1. Das Prinzip des Anti-Shake

Anti-Shake bezieht sich auf die Technologie, die ein kontinuierliches Auslösen verhindert. Es wird häufig verwendet, um das Benutzererlebnis zu optimieren und unnötige Anfragen oder Vorgänge zu reduzieren. In PHP können wir Anti-Shake durch JavaScript- oder Ajax-Aufrufe implementieren.

  1. Prinzip

Das Prinzip des Anti-Shake ist sehr einfach: Innerhalb eines bestimmten Zeitraums werden mehrere Triggerereignisse nur beim letzten Mal ausgeführt. Beispielsweise löst die Echtzeit-Suchfunktion eines Suchfelds jedes Mal eine Suchanfrage aus, wenn der Benutzer einen Buchstaben eingibt. Solche häufigen Anfragen setzen den Server stark unter Druck und die Benutzererfahrung ist nicht gut. Durch die Anti-Shake-Technologie können wir einen Zeitschwellenwert festlegen und Anfragen erst senden, nachdem der Benutzer eine Zeit lang mit der Eingabe aufgehört hat, um häufige Anfragen zu vermeiden.

  1. Codebeispiel

Hier ist ein einfaches PHP-Codebeispiel, das die Verwendung der Debounce-Technologie demonstriert:

<?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);
});
?>
Nach dem Login kopieren

Im obigen Code akzeptiert die Funktion debounce eine Rückruffunktion und eine Verzögerungszeit Die Anti-Shake-Funktion wird durch den Vergleich der Differenz zwischen der aktuellen Zeit und der letzten Auslösezeit implementiert. Stellen Sie bei jedem Auslösen eines Ereignisses zunächst fest, ob die Zeitdifferenz zwischen den beiden Auslösern größer als die eingestellte Verzögerungszeit ist. Wenn ja, führen Sie die Rückruffunktion aus. 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();
?>
Nach dem Login kopieren

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

2. Prinzip der Anti-Duplikat-Übermittlung

Anti-Duplikat-Übermittlung bedeutet, zu verhindern, dass Benutzer beim Einreichen eines Formulars oder einer Anfrage dieselben Daten mehrmals übermitteln, um die Einzigartigkeit und Richtigkeit der Daten sicherzustellen. In PHP können wir einige technische Mittel einsetzen, um zu verhindern, dass Benutzer wiederholt Übermittlungen vornehmen.

🎜Prinzip🎜🎜🎜Ein gängiges Prinzip zur Verhinderung wiederholter Übermittlungen besteht darin, Token oder Sitzung zur Verifizierung zu verwenden. Wenn der Benutzer das Formular absendet, generiert der Server ein eindeutiges Token und speichert es in der Sitzung oder gibt es als verstecktes Feld des Formulars an den Client zurück. Wenn der Server eine von einem Benutzer übermittelte Anfrage erhält, überprüft er zunächst die Gültigkeit des Tokens. Wenn der Token bereits verwendet wurde oder nicht den Regeln entspricht, lehnt er die Verarbeitung ab. Auf diese Weise verhindern wir, dass Benutzer dieselbe Anfrage wiederholt stellen. 🎜🎜🎜Codebeispiel🎜🎜🎜Das Folgende ist ein einfaches PHP-Codebeispiel, das zeigt, wie die Token-Technologie verwendet wird, um doppelte Übermittlungen zu verhindern: 🎜rrreee🎜Im obigen Code wird die Funktion generateToken zum Generieren verwendet Erstellen Sie ein eindeutiges Token und speichern Sie es in der Sitzung. Mit der Funktion checkToken wird überprüft, ob das übermittelte Token gültig ist. Beim Absenden des Formulars wird zunächst ein Token generiert und im ausgeblendeten Feld platziert. Anschließend wird die Gültigkeit des Tokens auf der Serverseite überprüft. 🎜🎜Zusammenfassung: 🎜🎜Anhand der obigen Codebeispiele können wir die Prinzipien und Implementierungsmethoden der Anti-Shaking- und Anti-Duplicate-Übermittlung in PHP klar verstehen. Anti-Shake und Anti-Duplikate-Übermittlung sind gängige Anforderungen in der tatsächlichen Entwicklung. Angemessene technische Mittel können die Benutzererfahrung verbessern und die Einzigartigkeit und Richtigkeit von Daten schützen. In praktischen Anwendungen können wir je nach Szenario geeignete technische Mittel zur Verhinderung von Verwacklungen und zur Wiedervorlage auswählen. 🎜

Das obige ist der detaillierte Inhalt vonVerstehen Sie die Prinzipien von Anti-Shaking und Anti-Resubmission in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!