ich löse das immer mit einem hash. der hash wird auf der formularseite generiert und in einem hidden feld und in der session gespeichert.
auf der seite die das Formular verarbeitet, wird als ersts geprüft ob der hash vorhanden ist (in der session), fals ja -> hash umgehen löschen, dann das formular verarbeiten. fals der hash nicht vorhanden ist, verarbeitung abbrechen.
der hash ist irgendwas eindeutigesmeistens irgendwie so: md5(Aktuelle Zeit in Millisekunden + rand(1,100000))