Уже есть несколько компонентов для CakePHP которые реализуют каптчу, и я некоторое время использовал их, но чемто они мне не нравились (или я не нашёл ту которая бы мне понравилась).
Однако мне понравилась каптча, которую предлагет CAPTCHA.ru.
Взяв их код, я сделал компоненту. Которой и хочу поделится.
Скачать код можно здесь: captcha component
Как использовать
1. Распаковываем архив и встраиваем в свой проект.
2. Добавляем в список компонент, которые будет использовать контроллер
$components=array("Captcha");
3. В нужном action пишем строчку
$this->Captcha->generate();
это сгенерирует новую строку и запишет её в сессию(ничего не возвращает)
4. Cоздаём дополнительный action (для вывода каптчи)
function captchaImg(){
$this->autoRender=false;
$this->Captcha->show();
}
5. Чтобы отобразить картинку во view:
<img src="<?php echo $html->url("/controller/captchaImg")?>" alt="">
controller - это ваш контроллер, где вы подключили компоненту, сгенерировали ключь, и создали функуию отображения (можно воспользоватся route)
6. для проверки каптчи:
if($this->Captcha->check($this->data["Msg"]["captcha"])){
//Каптча верна
}
$this->data["Msg"]["captcha"] - это строка, которую вы хотите сверить с сгенерированным ключём
В принципе этого достаточно.
У компоненты есть куча параметров которые описывать не вижу смысла, если взглянуть на код, и так становится понятно.
Если вы думаете что она очень проста для понимания роботами… я вас умоляю, она не на столько проста чтобы так слёту её мог понять спам бот, а если за ваш сайт возьмутся, то любая каптча будет безсильна.
ИМХО: каптча не универсальный способ защиты от спама с её помощью можно отсеит какойто процент.
Исходя из всего этого, вижу бессмысленным делать мега капчи, с мега сложным алгоритмом, с кучей шумов… таких что даже человеку трудно прочитать что там, хотя и простые, где просто картинка с обычным и ровным текстом тоже, по моему, не дело.