VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Возможно пишу не в том разделе, но все же надеюсь на вашу помощь. Постановка задачи: необходимо защитить просмотр главной страницы форума (index.php) с помощью CAPTCHA. После ввода кода с картинки должна устанавливаться кука, которая меняется каждый день, и ее наличие свидетельствует о том, что пользователь правильно ввел код с картинки, т.е. код с картинки необходимо вводить только раз в сутки. В остальное время предложение ввести код с картинки не появляется. В качестве CAPTCHA я использую KCAPTHCA. Реализация: В начале скрипта index.php добавляется следующий код:
Проблемы: Скрипт работает ровно до тех пор, пока vb не пытается поставить свою куку. При этом выдается сообщение об ошибке: Unable to add cookies, header already sent. Т.е. захожу на index.php, ввожу код с картинки, мой скрипт устанавливает куку key и обновляет страницу. После обновления страницы, если vb не пытается поставить/изменить свою куку загружается исходная страница форума index.php, иначе выводиться вышеописанное сообщение об ошибке. Форуму явно не нравиться условие if ($key != md5(date("m.d.y"))) { ... }, т.е. даже несмотря на то, что условие не выполняется, форум продолжает рапортовать об ошибке. Стоит закомментировать условие - исходная страница index.php загружается. После раскомментирования условия исходная страница будет нормально загружаться ровно до тех пор, пока форум не попытается поставить свою куку. Вот такая вот мистика...
Для начала мы на всех страницах (но никак не на index.php только, т.к. это глупо. Лучше сделать через модули, поместив модуль в global_start) ставим проверку на наличие куки, и соответсвии ее действительности. Иными словами проверяем, вводил ли человек изображение или нет. Если он его не вводил, то ПЕРЕНАПРАВЛЯЕМ человека на ОТДЕЛЬНЫЙ скрипт с капчей, который и создаст нашу куку. После успеного создания куки редиректим его обратно на ту страницу, на которую он пришел.
И причем там вообще сессии я не понял? Вы бы определились, с чем работаете. С сессиями или с куками. Разумеется после session_start куки создаваться не будут. И сессии там вообще не нужны.
@Mastermind
Простоузер
Join Date: Jan 2006
Posts: 6
Reputation:
Novice 0
Репутация в разделе: 0
0
Quote:
но никак не на index.php только, т.к. это глупо
так и будет в принципе, про index.php было приведено в качестве примера...
Quote:
Лучше сделать через модули, поместив модуль в global_start
можно об этом по-подробнее?
Quote:
Если он его не вводил, то ПЕРЕНАПРАВЛЯЕМ человека на ОТДЕЛЬНЫЙ скрипт с капчей, который и создаст нашу куку.
попробую реализовать через отдельный скрипт... о результатах сообщу...
Quote:
И причем там вообще сессии я не понял?
сессии нужны для каптчи...
Quote:
Разумеется после session_start куки создаваться не будут.
после session_start() нормально ставиться кука setcookie("key",md5(date("m.d.y")),time()+86400)
почему форум не может поставить свою куку - хз...
1) if (isset($HTTP_COOKIE_VARS["key"])) $key = $HTTP_COOKIE_VARS["key"]; else $key = "0"
наличие этой строки не влияет на создание форумовской куки
2) if ($key != md5(date("m.d.y"))) { ... }
влияет наличие этого условия, причем само условие не выполняется, т.е. тело условия также не выполняется. поэтому session_start() тут непричем...
кука не устанавливается тогда, когда уже отправлено body (например, echo "привет!"; setcookie("cookie",0);)
Добавлено через 20 часов 12 минут Собственно, разобрался сам:
Code:
<?php
// Тут мой скрипт
?>
// Пустая строка, которая идет на вывод пользователю, т.е. отсылается body
<?php
// Тут начинается скрипт движка форума, в частности страницы index.php
...
// А где-то тут идет команда setcookie, которая изменяет header
?>
Как видно setcookie пытается изменить header уже после того как было отправлено body. Тут-то и возникала ошибка... Решение проблемы:
Code:
<?php
// Тут мой скрипт
// Тут начинается скрипт движка форума, в частности страницы index.php
?>
Last edited by Mastermind : 09-04-2007 at 09:37 PM.
Reason: Добавлено сообщение