Comprendre les principes de l'anti-shake et de l'anti-resoumission en PHP

WBOY
Libérer: 2023-10-12 09:22:02
original
692 Les gens l'ont consulté

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

PHP est un langage de programmation largement utilisé pour le développement côté serveur avec des fonctionnalités puissantes et une flexibilité. Dans le développement réel, nous rencontrons souvent des scénarios dans lesquels nous devons empêcher des soumissions répétées ou un anti-shake. Cet article explorera les principes de l'anti-shake et de l'anti-resoumission en PHP et fournira des exemples de code spécifiques.

1. Le principe de l'anti-shake

L'anti-shake fait référence à la technologie qui empêche le déclenchement continu. Il est souvent utilisé pour optimiser l'expérience utilisateur et réduire les demandes ou opérations inutiles. En PHP, nous pouvons implémenter un anti-shake via des appels JavaScript ou Ajax.

  1. Principe

Le principe de l'anti-shake est très simple, c'est-à-dire que dans un certain laps de temps, plusieurs événements déclencheurs ne seront exécutés que la dernière fois. Par exemple, la fonction de recherche en temps réel d'un champ de recherche déclenchera une demande de recherche à chaque fois que l'utilisateur saisit une lettre. Des requêtes aussi fréquentes mettront beaucoup de pression sur le serveur et l'expérience utilisateur ne sera pas bonne. Grâce à la technologie anti-tremblement, nous pouvons définir un seuil de temps et envoyer des demandes uniquement après que l'utilisateur a arrêté de saisir pendant un certain temps afin d'éviter des demandes fréquentes.

  1. Exemple de code

Voici un exemple de code PHP simple qui montre comment utiliser la technologie anti-rebond :

<?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);
});
?>
Copier après la connexion

Dans le code ci-dessus, la fonction debounce accepte une fonction de rappel et un temps de retard, le La fonction anti-tremblement est mise en œuvre en comparant la différence entre l'heure actuelle et la dernière heure de déclenchement. Chaque fois qu'un événement est déclenché, déterminez d'abord si la différence de temps entre les deux déclencheurs est supérieure au temps de retard défini. Si tel est le cas, exécutez la fonction de rappel. 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();
?>
Copier après la connexion

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

2. Principe de soumission anti-doublon

La soumission anti-doublon signifie empêcher les utilisateurs de soumettre les mêmes données plusieurs fois lors de la soumission d'un formulaire ou d'une demande afin de garantir l'unicité et l'exactitude des données. En PHP, nous pouvons utiliser certains moyens techniques pour empêcher les utilisateurs de soumettre des soumissions répétées.

🎜Principe🎜🎜🎜Un principe commun pour éviter les soumissions répétées est d'utiliser un jeton ou une session pour la vérification. Lorsque l'utilisateur soumet le formulaire, le serveur génère un jeton unique et le stocke dans la session ou le renvoie au client sous forme de champ masqué du formulaire. Lorsque le serveur reçoit une requête soumise par un utilisateur, il vérifie d'abord la validité du Token. Si le Token a déjà été utilisé ou n'est pas conforme aux règles, il refuse de le traiter. De cette façon, nous empêchons les utilisateurs de soumettre la même demande à plusieurs reprises. 🎜🎜🎜Exemple de code🎜🎜🎜Ce qui suit est un exemple de code PHP simple qui montre comment utiliser la technologie Token pour éviter les soumissions en double : 🎜rrreee🎜Dans le code ci-dessus, la fonction generateToken est utilisée pour générer un jeton unique et stockez-le en session. La fonction checkToken est utilisée pour vérifier si le jeton soumis est valide. Lorsque le formulaire est soumis, un Token est d'abord généré et placé dans le champ caché, puis la validité du Token est vérifiée côté serveur. 🎜🎜Résumé : 🎜🎜Grâce aux exemples de code ci-dessus, nous pouvons clairement comprendre les principes et les méthodes de mise en œuvre de la soumission anti-shake et anti-duplicata en PHP. La soumission anti-tremblement et anti-duplication est une exigence courante dans le développement réel. Des moyens techniques raisonnables peuvent améliorer l'expérience utilisateur et protéger le caractère unique et l'exactitude des données. Dans les applications pratiques, nous pouvons choisir des moyens techniques anti-tremblement et anti-resoumission appropriés en fonction de scénarios spécifiques. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!