Guma: Mehrmaliges Versenden eines Formulares durch Sessions verhindern

Beitrag lesen

hi wahsaga,

Eindeutigen Token generieren, und bei Verarbeitung prüfen, ob dieser schon "benutzt" wurde.

OK, ich werde es so versuchen:

  • ich generiere eine eindeutige Zeichenkette bzw. Token.
  • diese wird beim Anzeigen des Formulars generiert und als HIDDEN-Formularelement hinterlegt
  • beim Abschicken speichere ich es in einer Session
  • Sendet der User das Formular erneut ab, wird ebenfalls der Token mitgeschickt.

Durch eine Überprüfung, ob dieser mitgelieferte Token bereits in der Session existiert, stelle ich fest, ob die Daten bereits per Formular übermittelt wurden.

Zur Generierung des Tokens verwende ich md5(uniqid(time()));

<?php
session_start();
$my_token = md5(uniqid(time()));
//das dann ein ein hidden feld
<input type="hidden" name="token" value="${my_token}" />
//...Nun prüfen, ob dieser Token als Sessionvariable bereits existiert.

//wenn ja 0> DIE
//wenn nein=> wird die Sessionvariable gesetzt:

$my_post_token = $_POST['token'];
if ( isset($_SESSION['mytoken'][$my_post_token]) ) {
    echo "Formular wurde bereits versandt!";
    exit;
} else {
    $_SESSION['mytoken'][$my_post_token] = true;
}

Frage: Der Nutzer muss zwingend Session-Cookies im Browser aktiviert haben sonst gehts nicht.

Wie gehe ich besser vor? Gibts Optimierungsvorschläge? Grüße von Guma