Prévenir les soumissions de formulaires en double

J'ai trouvé une technique pour éviter de dupliquer le formulaire de soumission en remontant en arrière/vers l'avant ou l'actualisation de la page. Et j'ai pensé à duscussing ici, je l'ai déjà testé un échantillon de ne pas en environnement de production, qu'est-ce que les défauts que vous pouvez identifier?

Veuillez noter que je suis bien conscient de l'utilisation de la Forme des Jetons, ce qui permettra de vous défendre contre les attaques CSRF, et n'a pas été ajouté dans les étapes ci-dessous.

-Générer des ID pour chaque forme, et l'utiliser comme champ caché dans le formulaire:

$formid = microtime(true)*10000;

-Sur le formulaire de soumission:

  • Validation à partir de données

  • Calculer la valeur de hachage de données des champs

    $allvals = '';
    foreach($_POST as $k=>$v){
        $allvals .= $v;
    }
    $formHash = sha1($allvals);
  • Valider le formulaire de hachage en comparant avec déjà enregistré les tables de hachage. la session de valeur est affectée à chaque forme par $formid variable.

    $allowAction = true;
    if(isset($_SESSION['formHash'][$_POST['formid']]) && ($_SESSION['formHash'][$_POST['formid']] == $formHash)){
         $allowAction = false;
    }
  • si le formulaire de hachage n'a pas été trouvé, cela signifie que c'est la première fois de soumission du formulaire ou de la forme de données est modifiée.
  • Si les données enregistrées ( à la base de données, par exemple), d'enregistrer le formulaire de hachage à la session:

    $_SESSION['formHash'][$_POST['formid']] = $formHash;

Version complète du code:
http://thebusy.me/2011/01/06/preventing-duplicate-form-submissions/

source d'informationauteur isogashii