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

#
Re: Использование отдельной capthca, основанной на сессиях
Сейчас совсем не понял к чему вы это написали
HostCMS писал(а):
Получение captcha_id:
Core_Captcha::getCaptchaId()


Проверка:
Core_Captcha::valid(Core_Array::getPost('captcha_id'), Core_Array::getPost('captcha'))


Разве это не относится к получению и последующей проверке уже введенных символов с картинки капчи?
Я же писал о другом. В руководстве по интеграции системы управления версии 5 написано, что экземпляр класса капчи создается так:
$Captcha = new Captcha();
/* куча другого кода */

После этого я в браузере вместо капчи вижу вот что:
Fatal error: Class 'Captcha' not found in Z:\home\hostcms\www\hostcmsfiles\structure\Structure98.php on line 2

Я что-то не так делаю? Подобного руководства для шестой версии системы нет.
Сначала я думал: "ладно, использую капчу http://www.captcha.ru. А нифига! Не удается ничего записать в массив $_SESSION из скрипта, который запускается в фоновом режиме.
Модератор
#
Re: Использование отдельной capthca, основанной на сессиях
Все таки давайте определимся с версией системы. Вызываете код как в 5ке, потом говорите, что руководства по 6ке нет. Какая у Вас версия?
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Использование отдельной capthca, основанной на сессиях
Давайте. Сейчас речь идет о шестой версии. В связи с тем, что в мануалах для шестой версии отсутствует описание использование капчи, я попытался использовать те же методы, что и в пятой версии.
Модератор
#
Re: Использование отдельной capthca, основанной на сессиях
lezhenkin,
Неправильное решение, примеры были приведены ранее. Core_Captcha - класс, содержащий статические методы. Что такое статические методы см. http://php.net/manual/ru/language.oop5.static.php
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Использование отдельной capthca, основанной на сессиях
alexander.egorov, спасибо. Буду разбираться с этим.
А о капче, работающей на сессиях, можете что-либо рассказать? Почему не происходит запись в массив $_SESSION?
Модератор
#
Re: Использование отдельной capthca, основанной на сессиях
Без кода я Вам, к сожалению, ничего не смогу сказать.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Использование отдельной capthca, основанной на сессиях
Речь идет о капче http://captcha.ru/kcaptcha/.
Когда я её помещаю в скрипты, которые я пишу сам, всё работает как надо.

Когда она мне нужна в CMS, я поступаю следующим образом. Файл index.php из скачанного архива капчи я переименовываю в make_captcha.php.

В панели администрирования создаю раздел в структуре сайта и выбираю тип раздела "Динамическая страница".
В коде динамической страницы я пишу вот что:

<form action="" method="post">
<p>Enter text shown below:</p>
<p><img src="/make_captcha.php?<?php echo session_name()?>=<?php echo session_id()?>"></p>
<p><input type="text" name="keystring"></p>
<p><input type="submit" value="Check"></p>
</form>
<?php
if(count($_POST)>0){
   if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] === $_POST['keystring']){
      echo "Correct";
   }else{
      echo "Wrong";
   }
}
unset($_SESSION['captcha_keystring']);
?>

В этом же каталоге, где лежит файл make_captcha.php, лежат файлы kcaptcha.php и kcaptcha_config.php.
В файле make_kaptcha.php следующий код:

<?php

error_reporting (E_ALL);

include('kcaptcha.php');

session_start();

$captcha = new KCAPTCHA();

if($_REQUEST[session_name()]){
   $_SESSION['captcha_keystring'] = $captcha->getKeyString();
}

?>

И вот загвоздка в том, что присваивание значение переменной сессии не происходит. Само изображение капчи формируется. И вот если в динамическую страницу добавить:
print_r($_SESSION);

...то $_SESSION['captcha_keystring'] будет отсутствовать.

Почему... не пойму.
Модератор
#
Re: Использование отдельной capthca, основанной на сессиях
lezhenkin,
наверное причина в том, что система хранит свои сессии в таблице, заменяя стандартные обработчики работы с сессиями, а Ваш внешний файл про это ничего не знает.
#
Re: Использование отдельной capthca, основанной на сессиях
HostCMS, и что мне с этим сделать? Изменить способ хранения сессий для системы? Или из внешнего файла обращаться к базе данных и добавлять данные сессии туда?
#
Re: Использование отдельной capthca, основанной на сессиях
В общем, после того, как вы меня направили в нужном направлении, проблему я решил.
Побродив по форуму, нашел такую тему: http://www.hostcms.ru/forums/17/4452/
Так как речь идет о шестой версии системы, я в своем стороннем (для самой системы) файле добавил это:

require_once($_SERVER['DOCUMENT_ROOT'].'/bootstrap.php');
Core_Session::start();


Затем из этого же файла я убрал это:
session_start();

Всё. Капча заработала как надо!

HostCMS, alexander.egorov, благодарю вас за помощь и подсказки.

P.S. Для пятой версии системы я тест не проводил. Но догадываюсь, что решение аналогичное.
Авторизация