Контактная информация            Баг трекер            Предложение хостинг-провайдерам

Использование CAPTCHA в формах

Санжар Ахмедов Автор: Санжар Ахмедов
Дата: 2 июля 2007
Рубрика: How-to

Чтобы использовать Captcha, нужно:

  1. В форму вставить картинку, которую пользователь должен распознать, и текстовое поле, куда он введет распознанный текст
  2. В обработчике формы проверить введенное пользователем значение

 

Например, нужно создать форму для посылки письма. Допустим форма находится на странице /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();" />
 

Комментарии

RSS RSS
Сергей, 13 января 2011
Подскажите как сделать скачивание файлов через captcha? точнее вставить распознование картинки перед ссылкой на скачивание в материале?
CMS Joomla

Добавить комментарий

Имя:     Email:
Комментарий:
Введите символы, которые видите на картинке.
Если символы неразборчивы, кликните по картинке несколько раз.