[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как показать капчу нежелательному посетителю?
Владимир55
Если на страницу пришел посетитель, в отношении которого есть подозрение, что это нежелательный робот, то такому посетителю необходимо предложить ответить на вопросы капчи.

Предполагается так:
- даем отклик 403;
- перенаправляем на страницу с капчей.

Для этого используется такой код:
header("Location: /control/captcha.php?url=". $url, true, 403 );
exit;
(Здесь в $url адрес страницы, на которую посетитель пришел)

Если для тестирования произвести скачивание страниц с помощью тестового скрипта, открывающего сайт функцией file_get_contents, то можно убедиться, что все так и происходит - функция получает код страницы с капчей.

Но если открывать браузером, то редиректа не происходит и мы видим просто пустую страницу (код на странице отсутствует).

Как можно предположить, отклик 403 и редирект для браузера несовместимы.

Как же решить эту проблему и корректно выполнить редирект?
Миша
К чему такие сложности? По каким критериям определяется нежелательность пользователя, и зачем пляски с бубном, заместо контента отдавай капчу, после успешной проверки - контент.

_____________
Принимаю заказы, писать в ЛС
Владимир55
При неудачном ответе на капчу ее нужно повторять. А это значит, что все равно требуется отдельный файл работы с капчей. Так что проще всего было бы переходить на него с самого начала.

Но если это невозможно, то придется воспользоваться Вашим советом.
Миша
Сделай отдельный файл, да подключай его. И какая разница сколько раз ввёл неправильно, сделай лимит, после чего сообщение - лимит превышен, попробуйте позже.

_____________
Принимаю заказы, писать в ЛС
Владимир55
Не катит.

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

А если его инклудить, то в том файле, к которому делается инклуд, база уже вызвана.
FatCat
Селектор.
Если посетитель желательный, показ контента.
Если нежелательный - инклюд файла показа капчи.

_____________
Бесплатному сыру в дырки не заглядывают...
Миша
Цитата (Владимир55 @ 2.04.2016 - 13:07)
в нем нужен код подключения базы.

к которому делается инклуд, база уже вызвана.

Ты чё прикалываешься?

_____________
Принимаю заказы, писать в ЛС
Владимир55
Цитата (Медведь @ 2.04.2016 - 09:16)
Цитата (Владимир55 @ 2.04.2016 - 13:07)
в нем нужен код подключения базы.

к которому делается инклуд, база уже вызвана.

Ты чё прикалываешься?

Какой же тут прикол?

А файле обработки капчи стоит подключение к базе
include ("db-config.php") ;


А если я проинклудю его в файл выдачи контента страницы, так там база уже вызвана и получается ошибка.

В тоже время, файл обслуживания капчи может использоваться самостоятельно, поэтому код подключение к базе в нем необходим.
Владимир55
Получается, что нужно как-то узнать, что соединение с базой уже произошло.

Не удается найти подходящую функцию.
Владимир55
Нужна функци, которая вернула бы true если есть соединение с базой и false в противном случае.
Игорь_Vasinsky
всё очень просто


if(посетитель желательный){
echo 'Вот тебе контент';
}
else{
echo 'вот тебе форма с капчей';
}


Цитата
Нужна функци, которая вернула бы true если есть соединение с базой и false в противном случае.



привет инопланетянам

<?php
function
YesNoConnection($conn){
return $conn->connect_error ? false : true;
}

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

//Проверяем
$test = YesNoConnection($mysqli);

var_dump($test);


а если серъёзно:
когда же вы хернёй перестанете заниматься?
ну не можете простой алгоритм спроектировать - не тратьте время, займитесь чем-нить другим

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Владимир55
Цитата (Игорь_Vasinsky @ 2.04.2016 - 09:41)
всё очень просто
если серъёзно:
когда же вы хернёй перестанете заниматься?
ну не можете простой алгоритм спроектировать - не тратьте время, займитесь чем-нить другим

Спасибо, все так оно и сделано. Но принцип YesNoConnection по некоторым причинам плохо подходит.
Теперь найдено несколько иное решение.

P.S. Если Вы не против, то я всё же продолжу заниматься своим делом.
Игорь_Vasinsky
Цитата
P.S. Если Вы не против, то я всё же продолжу заниматься своим делом.

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

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Владимир55
Я Вам не конкурент. Это совершенно точно.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.