PHP est un langage côté serveur puissant et flexible qui est souvent utilisé dans le développement Web pour gérer les interactions des utilisateurs et les demandes de données. Dans les projets réels, nous rencontrons souvent des problèmes tels que des utilisateurs déclenchant fréquemment des opérations et soumettant des formulaires à plusieurs reprises. Afin de résoudre ces problèmes, deux méthodes techniques, Debounce et Duplicate Submit Prevention, peuvent être utilisées. Cet article fournira une explication approfondie de ses principes et méthodes d'implémentation en PHP.
L'anti-shake est une technique utilisée pour limiter la fréquence à laquelle les événements sont déclenchés. Lorsqu'une opération est déclenchée fréquemment, le mécanisme anti-tremblement retardera l'exécution jusqu'à ce que l'utilisateur arrête l'opération pendant un certain temps. Ceci est très courant avec les suggestions de recherche, les clics sur des boutons ou les appels d’interface.
Par exemple, lorsqu'un utilisateur saisit du texte dans le champ de recherche, une requête sera déclenchée pour chaque caractère saisi. S’il n’est pas restreint, cela mettra beaucoup de pression sur le serveur. L'anti-tremblement réduit les requêtes invalides en définissant un intervalle de temps et en ne lançant les requêtes qu'après que l'utilisateur a arrêté de saisir pendant un certain temps.
<?php
function debounce($callback, $delay) {
static $lastCallTime = 0;
if (time() - $lastCallTime < $delay) {
return;
}
$lastCallTime = time();
call_user_func($callback);
}
function search() {
// Disons que voici la logique de la fonction de recherche
echo "Résultats de la recherche";
}
// Déclencheur d'événement d'entrée analogique
input.addEventListener('input', function() {
debounce('search', 500);
});
?>Dans le code ci-dessus, la fonction anti-rebond accepte une fonction de rappel et un temps de retard comme paramètres. En enregistrant le dernier temps de déclenchement, il garantit que seule la dernière opération est effectuée dans un certain laps de temps, obtenant ainsi un anti-secousse.
L'objectif principal de la prévention des soumissions répétées est d'empêcher les utilisateurs de soumettre à plusieurs reprises les mêmes données au cours du processus de formulaire ou de demande, provoquant ainsi une écriture répétée des données ou des erreurs logiques. Une approche courante consiste à utiliser le mécanisme de jeton ou la vérification de session.
Lorsque le serveur génère un formulaire, il crée un jeton unique, le stocke dans la session et l'écrit dans le champ caché du formulaire. Lorsque l'utilisateur soumet le formulaire, le serveur vérifie que le jeton correspond et n'est pas utilisé, et rejette la soumission si la vérification échoue.
<?php
session_start(); // allumerSession
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; // Vide utiliséToken
return true;
}
function submitForm() {
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
return;
}
$token = isset($_POST['token']) ? $_POST['token'] : '';
if (checkToken($token)) {
// Gérer la logique de soumission du formulaire
echo "Formulaire soumis avec succès";
} else {
echo "Soumettre le formulaire à plusieurs reprises";
}
}
// générerTokenet affichez le formulaire
$token = generateToken();
echo "<form method='post' action=''>";
echo "<input type='hidden' name='token' value='$token'>";
echo "<input type='submit' value='soumettre'>";
echo "</form>";
submitForm();
?>Dans cet exemple, la fonction generateToken génère un jeton unique et l'enregistre dans la session ; la fonction checkToken est chargée de vérifier la validité du Token et d'empêcher la réutilisation du même Token. Cela peut efficacement éviter la soumission répétée de données causée par les utilisateurs cliquant plusieurs fois sur le bouton de soumission.
L'anti-shake et la soumission anti-duplicata sont des méthodes d'optimisation et de protection courantes dans le développement Web. L'anti-tremblement peut réduire la pression sur les performances causée par des événements déclencheurs fréquents, tandis que la soumission anti-répétitive peut garantir l'unicité et l'exactitude des données. En utilisant rationnellement ces deux mécanismes, la stabilité et l’expérience utilisateur de l’application peuvent être considérablement améliorées.
Dans le développement réel, la méthode de mise en œuvre doit être sélectionnée de manière flexible en fonction du scénario. Par exemple, l'anti-secousse peut être implémenté via JavaScript sur le front-end, tandis que l'anti-répétition repose davantage sur le mécanisme Session ou Token sur le back-end. Quelle que soit la méthode utilisée, l’objectif est d’améliorer la robustesse du système et l’expérience utilisateur.