Maison  >  Article  >  développement back-end  >  Comment implémenter la fonction anti-shake en PHP pour éviter les soumissions répétées

Comment implémenter la fonction anti-shake en PHP pour éviter les soumissions répétées

王林
王林original
2023-10-12 09:36:24769parcourir

如何在 PHP 中实现防抖功能,避免重复提交

Comment implémenter la fonction anti-shake en PHP pour éviter les soumissions répétées

La fonction anti-shake signifie que lorsque l'utilisateur déclenche un événement en continu, la fonction de traitement d'événement ne sera exécutée qu'une seule fois et ne sera pas traitée. pendant un certain temps après le dernier déclencheur. Sera à nouveau exécuté. Dans le développement réel, les utilisateurs rencontrent souvent des situations dans lesquelles les utilisateurs soumettent des formulaires à plusieurs reprises. L'utilisation de la fonction anti-tremblement peut efficacement éviter cette situation.

Il existe de nombreuses façons d'implémenter la fonction anti-shake en PHP. Ci-dessous, je présenterai une méthode d'implémentation courante et donnerai des exemples de code spécifiques.

  1. Utilisez Session pour enregistrer l'horodatage du dernier commit.
// 开启 Session
session_start();

// 获取当前时间戳
$currentTimestamp = time();

// 获取上一次提交的时间戳
$lastTimestamp = $_SESSION['lastTimestamp'] ?? 0;

// 判断时间间隔是否小于指定的防抖时间(例如5秒)
if ($currentTimestamp - $lastTimestamp < 5) {
    echo '请勿重复提交';
    exit;
}

// 更新上一次提交的时间戳
$_SESSION['lastTimestamp'] = $currentTimestamp;

Dans cet exemple, nous utilisons Session pour enregistrer l'horodatage du dernier commit. En comparant l'horodatage actuel avec l'horodatage de la dernière soumission, déterminez si l'intervalle de temps est inférieur au temps anti-secousse spécifié (par exemple, 5 secondes). Si l'intervalle de temps est inférieur au temps anti-tremblement, cela peut être considéré comme une soumission répétée, et les informations d'invite seront affichées directement et l'exécution du script se terminera.

Il est à noter que pour utiliser Session, nous devons appeler la fonction session_start() au début du script pour ouvrir la Session.

  1. Utilisez Token pour éviter les soumissions répétées.

Un autre moyen couramment utilisé pour éviter les soumissions en double consiste à utiliser Token. Chaque fois que le formulaire est soumis, un jeton unique est généré et enregistré dans le champ masqué de la session ou du formulaire. Lors du traitement de la soumission du formulaire en arrière-plan, vérifiez d'abord si le jeton est valide et, si tel est le cas, poursuivez le traitement, sinon un message d'invite sera affiché.

Ce qui suit est un exemple de code qui utilise un jeton pour éviter les soumissions répétées :

// 开启 Session
session_start();

// 生成一个唯一的 Token
$token = md5(uniqid(rand(), true));

// 将 Token 保存在 Session 中
$_SESSION['token'] = $token;

// 在表单中输出隐藏域,将 Token 传递给后台
echo '<input type="hidden" name="token" value="' . $token . '">';

// 处理表单提交
if ($_POST['token'] !== $_SESSION['token']) {
    echo '请勿重复提交';
    exit;
}

// 继续处理表单数据
// ...

Dans cet exemple, nous générons un jeton unique à chaque fois que le formulaire est soumis et enregistrons le jeton dans la session. Transmettez le jeton au backend via les champs cachés du formulaire front-end. Lors du traitement de la soumission du formulaire en arrière-plan, vérifiez d'abord si le jeton obtenu à partir du formulaire est égal au jeton enregistré dans la session. S'ils ne sont pas égaux, cela sera considéré comme une soumission répétée et les informations d'invite seront affichées directement. et l'exécution du script se terminera.

En résumé, en utilisant Session ou Token, nous pouvons implémenter la fonction anti-shake en PHP pour éviter les soumissions répétées. En fonction des besoins et des scénarios spécifiques, choisissez la méthode appropriée à mettre en œuvre. Les méthodes d'implémentation ci-dessus sont couramment utilisées, et des exemples de code spécifiques sont donnés à titre de référence. J'espère que cela aide tout le monde.

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