Создаем свою captcha
Большая часть владельцев сайтов наверняка сталкивалась со спамом в комментариях, автоматическими регистрациями на форумах и прочими подобными неприятными вещами. Защититься от этого отчасти помогает captcha - картинка, со случайным набором букв, которые надо ввести в качестве подтверждения того, что Вы не робот. Во многие популярные системы это уже встроено. А что делать тем, кто пишет свои продукты? Правильно, делать свою captcha. Тем более, что это просто.
PHP:
-
<?php
-
-
// Создаем строку из трех случайных букв
-
// Сохраняем ее в сессию для того, чтобы потом проверить при обработке формы ввода
-
$_SESSION['secure_code'] = $codev;
-
// Создаем картинку, на которую положим буквы
-
// Заливаем картинку черным цветом
-
// Проходим по буквам
-
// Создаем картиночку для одной буквы
-
// Заливаем ее черным цветом
-
// Рисуем букву
-
$char,
-
1,
-
1,
-
);
-
// Попорачиваем букву под случайным углом
-
// Переносим ее на итоговую картинку со случайным сдвигом
-
$im,
-
$char,
-
0,
-
0,
-
14,
-
16
-
);
-
// Чистим мусор
-
} // for - для всех букв
-
-
// Выдаем правильный заголовок
-
// Отдаем картинку
-
-
?>
В результате получается картинка объемом около 700 байтов примерно такого вида: 


August 21st, 2008 at 23:08 Quote
Не плохо было бы узнать как его вставить в форму? И что бы он не копил рисунки на серваке!
August 21st, 2008 at 23:26 Quote
Т.е. без вот этого в форме:
и этого в скрипте:
imagegif($im, "code.gif");
August 22nd, 2008 at 06:41 Quote
В общем-то на сервере картинки не сохраняются вообще. Это не нужно.
Все намного проще. В форме пишете что-то типа:
Введите код <img src="/captcha.php" alt="" />: <input type="text" name="captcha" value="" />А после submit'а проверяете совпадение
$_REQUEST['captcha']и$_SESSION['secure_code'].August 22nd, 2008 at 20:47 Quote
У меня IE6 на Windows server 2003. Работает если сделать так в форме <?php print ""; ?> или сaptcha.php добавить session_cache_limiter();
Помогло отсюда http://ru2.php.net/manual/en/function.imagegif.php
August 22nd, 2008 at 20:54 Quote
За код спасибо!
September 24th, 2008 at 19:22 Quote
Я не программист, и чего-то не пойму куда надо в форму вставлять проверку $_REQUEST['captcha'] и $_SESSION['secure_code'].
Если допустим у меня страница на php, а запрос с формы проверяется JavaScript, как это можно реализовать в Jave?
September 25th, 2008 at 03:04 Quote
JavaScript Вам тут не поможет.
Порядок действий простой: на странице в форме вставляете картинку вида
<img src="captcha.php" alt="" />(где captcha.php - файл, содержащий код из статьи) и<input type="text" name="thecode" value="" />. затем в скрипте, который обрабатывает данные, получаемые от формы, проверяете совпадение$_REQUEST['thecode']и$_SESSION['secure_code']. если сони одинаковы - код введен правильно.October 7th, 2008 at 13:24 Quote
делаю так:
captcha.php
иначе в IE не работает!
October 7th, 2008 at 13:26 Quote
делаю так:
captcha.php
$img = imagecreate... создаем удобным способом
... тут рисуем буковки или что там нам нужно.
ob_start();
ob_implicit_flush( 0 );
imagejpeg( $img );
$jpeg = ob_get_contents();
ob_end_clean();
imagedestroy( $img );
header( 'Pragma: no-cache' );
header( 'Cache-Control: no-cache, no-store, must-revalidate, private' );
header( 'Expires: ' . gmdate( 'r', time() ) );
header( 'Content-Length: ' . strlen( $jpeg ) );
header( 'Content-Type: image/jpeg');
print $jpeg;
иначе в IE не работает!