Maison  >  Article  >  développement back-end  >  Soumission anti-shake et anti-duplicata : compétences essentielles en développement PHP

Soumission anti-shake et anti-duplicata : compétences essentielles en développement PHP

王林
王林original
2023-10-12 09:24:24521parcourir

防抖和防重复提交:PHP 开发中的必备技巧

Soumission anti-shake et anti-duplicata : compétences essentielles en développement PHP

Avec le développement d'Internet, les applications Web sont devenues un élément indispensable de la vie des gens. Dans le développement PHP, l'anti-secousse et l'anti-répétition sont l'une des compétences les plus importantes. Cet article présentera les concepts et principes de la soumission anti-shake et anti-duplicata, et fournira des exemples de code spécifiques.

1. Le concept et le principe de l'anti-shake
L'anti-shake est un moyen technique courant utilisé pour réduire le nombre d'exécutions d'événements fréquemment déclenchés. En termes simples, la fonction de l'anti-shake est d'exécuter uniquement le dernier événement déclenché dans un certain laps de temps, tout en ignorant les événements déclencheurs précédents.

Le principe de l'anti-shake est d'utiliser un timer pour retarder la fonction d'exécution d'un événement. Lorsque l'événement est déclenché, une minuterie sera définie dans la plage de temps de la minuterie, si l'événement est à nouveau déclenché, le temps sera resynchronisé si l'événement n'est pas déclenché à nouveau après l'expiration de la minuterie, le dernier déclenché ; l'événement sera exécuté.

Ce qui suit est un exemple de code PHP simple qui implémente la fonction anti-shake :

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);
    };
}

Exemple d'utilisation :

function search($keyword) {
    // 模拟搜索操作
    echo "搜索关键词:$keyword
";
}

$debounceSearch = debounce('search', 1000); // 设置延迟为 1 秒

$debounceSearch('PHP'); // 触发搜索关键词:PHP
$debounceSearch('JavaScript'); // 不触发
$debounceSearch('Python'); // 不触发

Dans l'exemple ci-dessus, une fonction anti-secousse est générée en appelant la fonction anti-rebond, et le temps de retard est défini sur 1 seconde. Chaque fois que la fonction debounceSearch est appelée, s'il y a un nouvel appel dans un délai d'une seconde, le temps sera réinitialisé. S'il n'y a pas de nouvel appel dans un délai d'une seconde, le dernier appel sera exécuté.

2. Le concept et le principe de la soumission anti-doublon
La soumission anti-doublon fait référence au fait d'empêcher les utilisateurs de soumettre la même demande plusieurs fois lors d'opérations telles que la soumission d'un formulaire. Des soumissions répétées peuvent provoquer des anomalies dans les données back-end et même entraîner une pression inutile sur le système.

Le principe pour éviter les soumissions en double est de générer un identifiant unique pour chaque demande avant de la soumettre. Après avoir reçu la demande, le backend vérifiera si l'identifiant a été utilisé, il sera considéré comme une soumission en double et refusera d'être traité s'il n'a pas été utilisé, il continuera à traiter la demande et ; marquez l’identifiant comme utilisé.

Ce qui suit est un exemple de code PHP simple qui implémente la fonction de prévention des soumissions en double :

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();

Dans l'exemple ci-dessus, un identifiant unique est généré via la fonction PreventDuplicateSubmit et enregistré dans la session. Lors de la soumission du formulaire, l'identifiant sera ajouté à la demande sous forme de champ caché (jeton), et il sera vérifié si le jeton demandé est cohérent avec celui enregistré dans la session.

Grâce aux techniques anti-tremblement et anti-resoumission ci-dessus, l'expérience utilisateur et la sécurité des applications Web peuvent être améliorées. Dans le développement réel, en fonction des besoins spécifiques et des scénarios commerciaux, des ajustements et des extensions appropriés peuvent être effectués pour différents scénarios afin de répondre aux besoins réels.

Bien que des exemples de code spécifiques soient fournis ci-dessus, il est recommandé de lire attentivement la documentation et de la tester avant utilisation pour garantir la stabilité et la sécurité du code.

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!

Déclaration:
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