форум vBSupport.ru > vBulletin > Old vB versions (3.0.x & 2.x.x) > vBulletin 3.6.x > vBulletin [3.6] Troubleshooting and Problems
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
Mastermind
Простоузер
Question Unable to add cookies, header already sent
0

Возможно пишу не в том разделе, но все же надеюсь на вашу помощь.
Постановка задачи: необходимо защитить просмотр главной страницы форума (index.php) с помощью CAPTCHA. После ввода кода с картинки должна устанавливаться кука, которая меняется каждый день, и ее наличие свидетельствует о том, что пользователь правильно ввел код с картинки, т.е. код с картинки необходимо вводить только раз в сутки. В остальное время предложение ввести код с картинки не появляется. В качестве CAPTCHA я использую KCAPTHCA.
Реализация:
В начале скрипта index.php добавляется следующий код:
Code:
<?php
if (isset($HTTP_COOKIE_VARS["key"])) $key = $HTTP_COOKIE_VARS["key"]; else $key = "0";
if ($key != md5(date("m.d.y"))) {
 session_start();
 if (isset($_POST["keystring"])) {
  if (isset($_SESSION["captcha_keystring"]) && $_SESSION["captcha_keystring"] == $_POST["keystring"]) {
   setcookie("key",md5(date("m.d.y")),time()+86400);
   echo "<meta http-equiv='refresh' content='1'>Access granted! Redirecting...";
  }
  else echo "<meta http-equiv='refresh' content='1'>Wrong security code. Access denied!";
 }
 else echo "<form action='' method='post'>\n<p><b>Enter code:</b></p>\n<p><img src='kcaptcha/index.php?" . session_name() . "=" . session_id() . "'></p>\n<p><input type='text' name='keystring'></p>\n<p><input type='submit' value='Enter'></p>\n</form>";
 unset($_SESSION['captcha_keystring']);
 die();
}
?>
Проблемы:
Скрипт работает ровно до тех пор, пока vb не пытается поставить свою куку. При этом выдается сообщение об ошибке: Unable to add cookies, header already sent. Т.е. захожу на index.php, ввожу код с картинки, мой скрипт устанавливает куку key и обновляет страницу. После обновления страницы, если vb не пытается поставить/изменить свою куку загружается исходная страница форума index.php, иначе выводиться вышеописанное сообщение об ошибке. Форуму явно не нравиться условие if ($key != md5(date("m.d.y"))) { ... }, т.е. даже несмотря на то, что условие не выполняется, форум продолжает рапортовать об ошибке. Стоит закомментировать условие - исходная страница index.php загружается. После раскомментирования условия исходная страница будет нормально загружаться ровно до тех пор, пока форум не попытается поставить свою куку. Вот такая вот мистика...
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
Malcolm Reed
Эксперт
 
Malcolm Reed's Avatar
Default
1

Для начала мы на всех страницах (но никак не на index.php только, т.к. это глупо. Лучше сделать через модули, поместив модуль в global_start) ставим проверку на наличие куки, и соответсвии ее действительности. Иными словами проверяем, вводил ли человек изображение или нет. Если он его не вводил, то ПЕРЕНАПРАВЛЯЕМ человека на ОТДЕЛЬНЫЙ скрипт с капчей, который и создаст нашу куку. После успеного создания куки редиректим его обратно на ту страницу, на которую он пришел.
И причем там вообще сессии я не понял? Вы бы определились, с чем работаете. С сессиями или с куками. Разумеется после session_start куки создаваться не будут. И сессии там вообще не нужны.
 
 
Mastermind
Простоузер
Default
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: Добавлено сообщение
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 05:13 PM.


Powered by vBulletin® Version 3.0.16
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.