Wat ik zelf altijd doe is eigenlijk vrij simpel, veilig (volgens mij) en gebruikers ondervinden geen hinder van de captcha.
<?php
session_start();
if((strtoupper($_SERVER['REQUEST_METHOD']) == 'POST') && ($_POST['verify-hash'] == $_SESSION['verify-hash'])) {
// script voor verwerken van form data
unset($_SESSION['verify-hash']); // zodat je volgende keer weer kan gebruiken
} else {
$randomhash = md5(mt_rand(1000000000,9999999999)); // genereer een hash van een random 10-cijferig getal
$_SESSION['verify-hash'] = $randomhash; // random hash opslaan in sessie
}
?>
In het formulier zet ik dan een hidden field met als naam 'verify-hash' en als waarde <?php echo $randomhash; ?>.
Volgens mij is dit vrij veilig, zeker in combinatie met het controleren van de referer. Maar misschien denkt iemand anders er anders over? Ik hoor het graag!!