Чтобы использовать Captcha, нужно:
- В форму вставить картинку, которую пользователь должен распознать, и текстовое поле, куда он введет распознанный текст
- В обработчике формы проверить введенное пользователем значение
Например, нужно создать форму для посылки письма. Допустим форма находится на странице /form/, а обработчик на странице /form/sendmail/.
В шаблоне формы пишем:
{* Запрашиваем новый одноразовый "билет" Captcha и записываем его в переменную "cid" *}
{set cid=$ctx->newCaptchaId()}
{* Передаем идентификатор билета в обрабочик через QUERY_STRING *}
<form action="/form/sendmail/?ticket_id={$cid}" method="POST">
<!-- Здесь вводятся данные для посылки письма -->
<div>
Рапознайте текст <img src="/res/captcha/{$cid}.png"> :
<input type="text" name="ticket_text">
</div>
</form>
Если для отправки письма в обработчике формы используется стандарный объект Open Constructor «Отправка писем», то в свойствах этого объекта в секции Captcha задаем:
- Идентификатор ключа ticket_id
- Ключ ticket_text
- отчекиваем «Закрывать пустую сессию»
Если обработчик отправки письма написан вручную разработчиком, то можно следующим php кодом проверить Captcha:
// до этого должен быть вызван session_start();
$ticket_id = (string) @$_GET['ticket_id'];
$ticket_text = strtolower((string) @$_POST['ticket_text']);
$ticket_expected = (string) @$_SESSION['_cid'][$ticket_id];
// проверяем валидность
$isCorrect = $ticket_text && $ticket_expected && ($ticket_text == $ticket_expected);
// удаляем билет из сессии
if($ticket_expected) {
unset($_SESSION['_cid'][$ticket_id]);
if(!sizeof((array) @$_SESSION['_cid']))
unset($_SESSION['_cid']);
}
if($isCorrect) {
// оправляем письмо
} else {
// сообщаем пользователю что он разпознал текст неверно
}
// закрываем пустую сессию
if(isset($_SESSION) && !sizeof($_SESSION)) {
@session_unset();
@session_destroy();
}
Если пользователю нужно предоставить возможность выбрать картинку для распознания, то для вставки картинки в шаблон нужно:
<!-- если пользователь кликнет картинку, она заменится на новую-->
<img src="/res/captcha/{$cid}.png"
onclick="this.src = '/res/captcha/{$cid}.png?' + (new Date()).getTime();" />

Комментарии
CMS Joomla