Bon je ne fais pas de php, mais j'ai eu à résoudre un cas similaire.
A la génération du formulaire par mon script, je créé une clé unique (un bon gros rand des familles), que je met dans un hidden.
Du côté du serveur, je garde une trace de cette clé, un bête touch (moins gourmand que mettre en base) suffit.
Lors de la validation du formulaire, je regarde si le fichier (donc la clé) existe (un pti -e ) et s'il existe, je procède au traitement et supprime le fichier.
Si le fichier n'existe pas, c'est que le formulaire a déjà été utilisé et j'affiche le message qu'il faut.
De plus j'ai sur le serveur une entrée en crontab qui supprime toutes les clés non utilisées vieilles de plus de X heures (en général quand on a affiché une page avec le formulaire, on n'attend pas des heures avant de valider).
Cela permet de résoudre le cas du refresh accidentel, du back, mais aussi celui du refresh volontaire, du flood par (back+valide)*n, ou du bête script....
J'ai ce système depuis quelques années sur mon service de forums et ça tient bien la route.
# Mon astuce
Posté par Twidi (site web personnel) . En réponse au message Besoin d'une petite astuce.... Évalué à 4.
A la génération du formulaire par mon script, je créé une clé unique (un bon gros rand des familles), que je met dans un hidden.
Du côté du serveur, je garde une trace de cette clé, un bête touch (moins gourmand que mettre en base) suffit.
Lors de la validation du formulaire, je regarde si le fichier (donc la clé) existe (un pti -e ) et s'il existe, je procède au traitement et supprime le fichier.
Si le fichier n'existe pas, c'est que le formulaire a déjà été utilisé et j'affiche le message qu'il faut.
De plus j'ai sur le serveur une entrée en crontab qui supprime toutes les clés non utilisées vieilles de plus de X heures (en général quand on a affiché une page avec le formulaire, on n'attend pas des heures avant de valider).
Cela permet de résoudre le cas du refresh accidentel, du back, mais aussi celui du refresh volontaire, du flood par (back+valide)*n, ou du bête script....
J'ai ce système depuis quelques années sur mon service de forums et ça tient bien la route.