Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Еще про капчу

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Абстрактный конь в вакууме...
DeepVarvar Супермодератор
Отправлено: 06 Июля, 2012 - 01:32:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Сегодня мыслил про капчу...
Абстрактный конь в вакууме...

Предположим у нас есть некоторый код, генерирующий картинку.
Рассмотрим варианты сохранения валидного результата:

1) После генерации валидного результата, пишем его в сессию и генерируем картинку на его же основе.
2) После генерации валидного результата, пишем его в БД и генерируем картинку на его же основе.

Если я забыл еще какие-то классические варианты - дополните.

Так вот, мысль о абстрактных конях возникла не с проста, а в виду желания уменьшить нагрузку на сервер.

Напомню как происходит весь этот процесс:
1) Вываливается хтмл-страница.
2) Браузер найдя ссылку на картинку капчи ломится за ней, капча генерируется всегда, валидная сессия или запись в БД обновляется/добавляется всегда.
3) На следующей необходимой странице вся эта кухня валидируется, либо тащим из БД, либо из сессии.

Попытаемся заапгрейдить:
1) На известной странице генерируется валидный результат и пишется в сессию.
2) Вываливается хтмл-страница.
3) Браузер найдя ссылку на картинку капчи ломится за ней, предоставляя сессию с валидным результатом.
4) Картинка капчи генерируется только в том случае, если сессия имеется в наличии и не устарела, (на усмотрение разработчика).
5) На следующей необходимой странице вся эта кухня валидируется из сессии.

Так, что у нас тут получается?
Мы выносим всякие там рандомизаторы и сессии из скрипта капчи.
Все генерации и проверки идут только в контексте бизнес-логики.
Капча не рисуется лишний/каждый раз и не жрет ресурсы машинки.
Ну и естественно капча занимается только тем, чем ей положено - только лишь отрисовывает картинку.

Х.з., может я и прописные истины тут щас напечатал, пусть даже и так - главное прозрел, главное сам... Закатив глазки
 
 Top
caballero
Отправлено: 06 Июля, 2012 - 01:52:20
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Да, без бутылки не разобратся


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DeepVarvar Супермодератор
Отправлено: 06 Июля, 2012 - 08:40:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Не, ну если тебе наличие бутылки реально помогает в разбирании - я только за Радость
 
 Top
DlTA
Отправлено: 06 Июля, 2012 - 09:31:32
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




1) неужели генерация картинки 150px/100px(+-), настолько тяжела для сервера?
2) я не понял что пишется в базу?
3) по поводу третьего варианта (из 5 пунктов) как то не логично где то генерить код, а потом его передавать на генерирование по нем капчи, код капчи и сама капча это одно целое, и логичнее вернуть куда либо (например в сессию) код который должны надо ввести с капчи сразу же при генерации капчи, код окромя того что генерит саму каритнку так же генерит набор который надо вывести на картинке. так впроде логичнее
4) все равно капчи придется генерить часто, хотя бы тот факт что некоторые капчи будут не читабельны а потому попросят обновить
 
 Top
Мелкий Супермодератор
Отправлено: 06 Июля, 2012 - 09:42:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Все рандомы на фоне его величества GD - детский лепет.
Вот и получится, что мы пытаемся оптимизировать цикл простоя ОС - вещь, конечно, полезная, но незаметная.

Интереснее было бы вообще отрисовывать капчу только при наличии необходимости в ней. Пример активного, но бесполезного поглощения ресурсов:
есть блог, для анонимных гостей комментарии с капчей. При посещении анонимами (ссылку на пост опубликовали где-то), каждому из них генерируется капча при прогрузке страницы. А вот сколько из посетителей в принципе пытались прокомментировать запись?

Пища для размышлений, ответа у меня нет.


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 06 Июля, 2012 - 09:51:29
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Мелкий пишет:
генерируется капча при прогрузке страницы. А вот сколько из посетителей в принципе пытались прокомментировать запись?
зачем каждый раз? еслу уж все так плохо с генерацией, так и запрашивайте HTML с капче только при запросе его от пользователя, проще говоря ссылку запрпшивать только тогда когда ее попросил юзер что бы чет там прокоментить
 
 Top
Zuldek
Отправлено: 06 Июля, 2012 - 09:52:43
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




А нельзя кеш задействовать? Хотя бы кешировать раз в минуту.
При первом запросе показывать каптчу из кеша, если неправильно набрал второй раз (ну или более, там настраиваемо под сложность каптчи, количество ботов желающих спамить на страницу) то пусть уже генерирует каптчу заново. Всеравно большая часть юзверов будет каптчу правильно набирать с 1 раза, если она адекватная.

upd. поправьте если несу ахинею, ночью не выспался потому сегодня это у меня наблюдается местами Огорчение

(Отредактировано автором: 06 Июля, 2012 - 09:54:56)

 
 Top
DlTA
Отправлено: 06 Июля, 2012 - 11:01:19
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Zuldek, такую капчу проще пройти, если высекут что она отдается многократно, то запросив ее N раз можно в конечном итоге суметь ее подобрать
просто запрашивая каждый раз под новым юзверем, и только потоп начиная ее вводить
 
 Top
Zuldek
Отправлено: 06 Июля, 2012 - 11:14:43
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Каким образом? Кеш 1 на всех. Запрашивает не только ваш бот или юзер но и другие юзеры постоянно. Следовательно вы никак не можете знать какая в данный момент каптча в кеше, потому что что другой юзер или псевдо-юзер мог ввести её неправильно и она обновится в кеше.
Если будем максимально быстро запрашивать её, да ещё с разных юзверей чтобы сделать подбор: вам 1 раз отдаст кеш, 2 (если был неправильный ввод) и более раз, например, отдаст другую каптчу сгенерированную и записаную в кэш. Кто сказал что это как-то привязано к тому, какой юзер её запрашивает?

Если говорить о запросе каждый раз новым юзером и только потом вводить осуществлять ввод, ну а что вы от этого выиграете?
Вы точно также можете разобрать генерируемую на лету каптчу, запросив её 1 раз а потом ввести её в загруженную форму, не обновляя страницу.

Отличай в том что мы просто обновляем каптчу в кэше только в случае неправильного ввода сразу (либо после второй попытки), а также регулярно, например раз в минуту (или любое установленное значение другое, зависящее от приложения). В любом случае вы будете отдавать с сервера уже статику (может быть даже с оперативной памяти) и это будет однозначно быстрее генерации каптчи при каждом её запросе.

(Отредактировано автором: 06 Июля, 2012 - 11:32:04)

 
 Top
DlTA
Отправлено: 06 Июля, 2012 - 12:03:47
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Zuldek пишет:
другой юзер или псевдо-юзер мог ввести её неправильно и она обновится в кеше
и теперь представьте что получится, выпадает эта капча толпе юзверей. один из толпы вводит неправильно, а в это время остальные уже получили капчу но еще вводят с нее текст, капча обновляется, но все остальные юзвери об этом не знают и вводят то что было на старой, и в итоге даже если они введут верное (то что нарисовано) но в итоге окажется что ввели не правильно.
 
 Top
Zuldek
Отправлено: 06 Июля, 2012 - 12:16:43
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




продумывать надо... .
 
 Top
caballero
Отправлено: 06 Июля, 2012 - 12:23:21
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




че то не пойму откуда столько сложностей с какой то капчей
нагрузка на сервер будет только если нужно вводить капчу за каждым постом но тогда хозяин сайта должен понимать что сервер нужен мощнее. Да и потом это должен быть очень интересный сайт чтобы юзеру не надоело я капчу каждый раз воодить.

а на обычный сайтах капча только при регистрации.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DeepVarvar Супермодератор
Отправлено: 06 Июля, 2012 - 22:14:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Мелкий пишет:
При посещении анонимами (ссылку на пост опубликовали где-то), каждому из них генерируется капча при прогрузке страницы. А вот сколько из посетителей в принципе пытались прокомментировать запись?

Пища для размышлений, ответа у меня нет.
Повесит событие на textarea, и если юзверь начал писать туда - подгрузить капчу.

(Отредактировано автором: 06 Июля, 2012 - 22:55:13)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Тестирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB