Использование отдельной capthca, основанной на сессиях

#
Использование отдельной capthca, основанной на сессиях
Здравствуйте.

При попытке встроить на сайт капчу, которая хранит сгенерированный код в сессии (к примеру, w3capthca - http://www.w3box.ru/captcha/), столкнулся с проблемой:
Капча генерируется и выводится картинкой, однако на страницах, полученных с помощью инструмента "Типовые динамические страницы" HostCMS - не удаётся обратиться к элементу 'captcha' массива $_SESSION.
Хотя если создать отдельный скрипт на том же сервере, то из него будет доступна переменная $_SESSION['captcha'].

Версия: HostCMS 5.5 Free.

Не могли бы Вы объяснить, в чем проблема, и можно ли исправить ситуацию?
#
Re: Использование отдельной capthca, основанной на сессиях
ну а чем не устраивает стандартная капча?
не вижу код, где в сесию пишется сама капча.(приведите код страницы тогда и можно разговаривать)
#
Re: Использование отдельной capthca, основанной на сессиях
Ну, чем не устраивает - это не суть.

Код страницы, допустим:

<form action="" method="post">
Введите код с картинки: <br/>
<input type="text" name="m_captcha" value="" /><br/>
<img src="/w_captcha.php" alt=""/><br/>
<input type="submit" value="Ввести" />
</form>

<?
if(isset($_POST['m_captcha']))
{
if(isset($_SESSION['captcha']))
{
   if($_POST['m_captcha'] == $_SESSION['captcha'])
      echo 'correct captcha';
   else
      echo 'incorrect captcha';
}
else
  echo 'no captcha in session';
}
?>


Собственно в сессию капча пишется в файле w_captcha.php (http://www.w3box.ru/captcha/download/).

Если данную форму поместить на страницу HostCMS 5.5 и отправить её, то в результате выведется "no captcha in session".
Модератор
#
Re: Использование отдельной capthca, основанной на сессиях
Inquisitor_I,
а откуда подозревается, что мы угадаем как, где и когда эта программа пишет в сессии?
Система автоматически стартует сессию, если есть переданный PHPSESSID, он передается автоматически после старта сессии. Могу предположить, что проблема со стартом сессии. Вы код вносите в настройки типовой и потом прерываете выполнение с помощью
exit();
?
#
Re: Использование отдельной capthca, основанной на сессиях
HostCMS,
хм, я вроде написал, в сессию пишется в файле w_captcha.php.
Который вызывается в
<img src="/w_captcha.php" alt=""/>


Настройки типовой дин.стр. не используются в данном случае вообще.

Собственно, вот полный код файла w_captcha.php:

<?php
/*
w3captcha - php-скрипт для генерации изображений CAPTCHA
версия: 1.1 от 08.02.2008
разработчики: http://w3box.ru
тип лицензии: freeware
w3box.ru © 2008
*/

session_start();

$count=5;   /* количество символов */
$width=100; /* ширина картинки */
$height=48; /* высота картинки */
$font_size_min=32; /* минимальная высота символа */
$font_size_max=32; /* максимальная высота символа */
$font_file="./Comic_Sans_MS.ttf"; /* путь к файлу относительно w3captcha.php */
$char_angle_min=-10; /* максимальный наклон символа влево */
$char_angle_max=10;   /* максимальный наклон символа вправо */
$char_angle_shadow=5;   /* размер тени */
$char_align=40;   /* выравнивание символа по-вертикали */
$start=5;   /* позиция первого символа по-горизонтали */
$interval=16;   /* интервал между началами символов */
$chars="0123456789"; /* набор символов */
$noise=10; /* уровень шума */

$image=imagecreatetruecolor($width, $height);

$background_color=imagecolorallocate($image, 255, 255, 255); /* rbg-цвет фона */
$font_color=imagecolorallocate($image, 32, 64, 96); /* rbg-цвет тени */

imagefill($image, 0, 0, $background_color);

$str="";

$num_chars=strlen($chars);
for ($i=0; $i<$count; $i++)
{
   $char=$chars[rand(0, $num_chars-1)];
   $font_size=rand($font_size_min, $font_size_max);
   $char_angle=rand($char_angle_min, $char_angle_max);
   imagettftext($image, $font_size, $char_angle, $start, $char_align, $font_color, $font_file, $char);
   imagettftext($image, $font_size, $char_angle+$char_angle_shadow*(rand(0, 1)*2-1), $start, $char_align, $background_color, $font_file, $char);
   $start+=$interval;
   $str.=$char;
}

if ($noise)
{
   for ($i=0; $i<$width; $i++)
   {
      for ($j=0; $j<$height; $j++)
      {
         $rgb=imagecolorat($image, $i, $j);
         $r=($rgb>>16) & 0xFF;
         $g=($rgb>>8) & 0xFF;
         $b=$rgb & 0xFF;
         $k=rand(-$noise, $noise);
         $rn=$r+255*$k/100;
         $gn=$g+255*$k/100;      
         $bn=$b+255*$k/100;
         if ($rn<0) $rn=0;
         if ($gn<0) $gn=0;
         if ($bn<0) $bn=0;
         if ($rn>255) $rn=255;
         if ($gn>255) $gn=255;
         if ($bn>255) $bn=255;
         $color=imagecolorallocate($image, $rn, $gn, $bn);
         imagesetpixel($image, $i, $j , $color);               
      }
   }
}

$_SESSION["captcha"]=$str;

if (function_exists("imagepng"))
{
   header("Content-type: image/png");
   imagepng($image);
}
elseif (function_exists("imagegif"))
{
   header("Content-type: image/gif");
   imagegif($image);
}
elseif (function_exists("imagejpeg"))
{
   header("Content-type: image/jpeg");
   imagejpeg($image);
}

imagedestroy($image);

?>
#
Re: Использование отдельной capthca, основанной на сессиях
Подскажите, пожалуйста. Как мне правильно подключить вот эту каптчу? К обычному сайту подключение происходит без проблем. К сайту, работающему на HostCMS, подключить не выходит. Картинка с каптчей видна, но вот массив $_SESSION типа пуст.
Делаю это в динамической странице. Так и не понял что надо писать в её настройках.
Весрия HostCMS 5.9.34.
#
Re: Использование отдельной capthca, основанной на сессиях
Та же проблема. В динамической странице выводится форма, а переменная в массиве $_SESSION заносится в отдельном файле. При проверке переменная в $_SESSION оказывается пустой. Пробовал стартовать сессии и в том и в другом файле, не сработало.
Версия hostcms v.6.0.6
#
Re: Использование отдельной capthca, основанной на сессиях
С решением проблемы так никто и не помог.
Никто не разобрался с тем почему в массив $_SESSION не удается записать что-либо?
#
Re: Использование отдельной capthca, основанной на сессиях
Ладно, не хотите объяснять как запускать подобного рода Captchа, не объясняйте. Расскажите как использовать системную капчу в HostCMS 6. Попытка создать экземпляр класса Captcha вызывает ошибку, сообщающую о том, что подобный класс не найден. А в мануале для шестой версии системы вообще отсутствует описание использования системной капчи.
Модератор
#
Re: Использование отдельной capthca, основанной на сессиях
lezhenkin писал(а):
Попытка создать экземпляр класса Captcha вызывает ошибку, сообщающую о том, что подобный класс не найден.

Просили весь код открыть - открыли, теперь поиском никто не может пользоваться.
Получение captcha_id:
Core_Captcha::getCaptchaId()

Проверка:
Core_Captcha::valid(Core_Array::getPost('captcha_id'), Core_Array::getPost('captcha'))
Авторизация