Maison >développement back-end >tutoriel php >Comment puis-je empêcher la resoumission involontaire de formulaires dans les applications Web ?

Comment puis-je empêcher la resoumission involontaire de formulaires dans les applications Web ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-13 00:43:02560parcourir

How Can I Prevent Unintended Form Resubmission in Web Applications?

Empêcher la resoumission involontaire de formulaires

La resoumission de formulaires en raison de l'actualisation de la page est un désagrément courant dans les applications Web. Pour gérer ce problème efficacement, il est crucial d'employer les stratégies suivantes :

Redirection après soumission

Au lieu d'afficher la réponse sur la même page, redirigez l'utilisateur vers un page séparée une fois le formulaire soumis. Cela garantit que lorsque la page actualisée se charge, il s'agit d'une nouvelle requête GET et non d'une répétition de la requête POST qui a déjà été traitée.

Exemple :

// submit
// set success flash message (you are using a framework, right?)
header('Location: /path/to/record');
exit;

Désactiver la mise en cache du navigateur

Pour empêcher le navigateur de mettre en cache votre formulaire, ajoutez les en-têtes suivants à votre script PHP :

header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');

Jeton de page unique

Générez un jeton unique sur le serveur pour chaque soumission de formulaire. Incluez ce jeton en tant que champ masqué dans le formulaire et vérifiez-le avant le traitement. Si le jeton ne correspond pas ou est manquant, supprimez la demande en tant que soumission en double.

Exemple (avec jeton de session) :

<?php
session_start();

// Generate a unique token and store it in the session
$token = md5(uniqid(mt_rand(), true));
$_SESSION['token'] = $token;

?>

<!DOCTYPE html>
<html>
<body>

<form action="submit.php" method="post">
  <input type="text" name="name">
  <input type="hidden" name="token" value="<?php echo $token; ?>">
  <input type="submit" value="Submit">
</form>

</body>
</html>
<?php
session_start();

// Get the submitted token
$token = $_POST['token'];

// Check if the token matches the session token
if ($token != $_SESSION['token']) {
  // Discard the request
} else {
  // Process the form data
}

Conclusion

En mettant en œuvre ces techniques, vous pouvez empêcher efficacement les resoumissions indésirables de formulaires dues à l'actualisation de la page et garantir que votre application Web se comporte comme prévu.

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