El problema de este método es que es fácil de saltar, si usas un sniffer y capturas lo que envía el formulario o simplemente investigas el código fuente de tu página en busca de campos ocultos, aunque no se vean en el navegador, en el código fuente canta el: <input type="hidden"> así que no te lo recomiendo.
Lo de sniffers es todo un tema, en cuanto a lo del campo hidden lo puedes crear con DHTML accediendo al DOM, y asi no aparecera en el codigo fuente de tu web. Pero si en el archivo .js.
Para mi lo mas factibles es lo de captcha debido a que el control se realiza en el server, y no gasta recusos como usar una base de datos, en cuanto o lo de cookies y sessiones se pueden manejar desde el cliente, es decir que con solo re abrir el navegador se borra la session.