python - 如何防止狂点提交表单按钮导致的数据重复?
高洛峰
高洛峰 2017-04-18 10:05:45
0
12
1668
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(12)
洪涛

Désactivez le bouton immédiatement après avoir cliqué dessus. Si la soumission échoue, restaurez le bouton, sinon il sera redirigé vers la page de réussite.

Ou après avoir cliqué, un masque apparaîtra.

Cependant, les deux solutions ci-dessus nécessitent js. Pourquoi ne veux-tu pas utiliser js ?

迷茫

Le bouton 1.JS empêche les clics répétés

2. Contrôle du cache côté serveur, la méthode consiste à écrire à plusieurs reprises la bibliothèque

3. Créez un index unique dans la base de données (par exemple, le titre du message est unique et ne peut pas être répété)

阿神

Peut être contrôlé depuis le front et le backend :

  • Ajoutez une logique de contrôle frontal pour désactiver le bouton "Publier" lorsque l'utilisateur clique pour publier

  • Ajouter une logique de contrôle en arrière-plan. Lorsqu'une demande de publication est envoyée, vérifiez si la personne a envoyé une publication avec le même titre et le même contenu. Si tel est le cas, interdisez la création de cette publication en double

  • .
迷茫

Vous pouvez générer un identifiant lorsque le modèle est rendu, puis soumettre l'identifiant ensemble lors de la soumission, puis le comparer avec le backend, de sorte que si l'identifiant transmis est incorrect, le traitement sera ignoré.

PHPzhong

Premièrement, une solution plus simple consiste à utiliser la fonction anti-rebond pour limiter la fréquence des déclencheurs de rappel DOM.

Deuxièmement, si vous devez encore considérer la situation dans laquelle les utilisateurs désactivent js à cette époque, ne le faites pas au niveau du front-end.

洪涛

Ce problème ne peut pas être résolu en s'appuyant uniquement sur le front-end.

  1. Ajoutez la mise en cache, utilisez Map pour une seule machine et utilisez Redis pour la mise en cache distribuée.

  2. Utilisez les procédures stockées Mysql pour transmettre la pression de concurrence à la base de données

  3. Verrouillage, verrouillage optimiste ou verrouillage pessimiste

  4. Clé unique

刘奇

La page actuelle génère un identifiant unique. Lors de la soumission, le serveur détermine qu'elle ne sera traitée qu'une seule fois. Par exemple, la page de soumission du formulaire de laravel a un csrf_token

.
刘奇

Ensuite, écrivez le vôtre csrf en arrière-plan. Fournissez quelques idées et générez automatiquement une clé. Apportez la clé lors de la soumission du contenu. Si elles sont identiques, réinitialisez-la ou effacez-la. juste une soumission en double

迷茫

Formulaire postez une chaîne aléatoire de champs cachés et placez-la dans la session
Lorsque le programme reçoit cette chaîne aléatoire et la compare avec la chaîne de la session, si elle est la même, il la soumettra et si ce n'est pas pareil, cela provoquera une comparaison d'erreur. Réinitialisez simplement cette session

Ty80

1. Vérification JS, désactivez le bouton de soumission après la soumission
2. Vérification côté serveur, chaque fois que la page est actualisée, un jeton sera généré dans la page lors de la soumission des données au serveur. jugé si le jeton est valide, puis les données seront traitées et le jeton sera détruit, si le front-end le soumet à plusieurs reprises, il ne sera certainement pas traité car le jeton est détruit

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal