Я создаю форму для своего модуля, и последний шаг - передать контрольную проверку для обеспечения безопасности. Я загрузил последнюю версию securimage. Качча отображается правильно и могут генерироваться новые капли. Однако после публикации формы рекомендуемый метод проверки правильности ввода captcha никогда не возвращает true.Joomla 3.3 session and securimage captcha
index.php:
<form method="post" action="tmpl/form/contact.php" name="contactform" id="contactform">
<img id="captcha" src="securimage/securimage_show.php" alt="CAPTCHA Image" />
<a style="text-decoration: none; font-size: 10px; margin-top: -10px; " href="#" onclick="document.getElementById('captcha').src = '/securimage/securimage_show.php?' + Math.random(); return false">Refresh</a>
/**input here **/ name="captcha_code"
contact.php:
define('_JEXEC', 1)`;
define('JPATH_BASE', realpath(dirname(__FILE__))."/../../../..");
define('DS', DIRECTORY_SEPARATOR);
require_once (JPATH_BASE .DS.'includes'.DS.'defines.php');
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php');
$mainframe = JFactory::getApplication('site');
$mainframe->initialise();
$user = JFactory::getUser();
$session = JFactory::getSession();
jimport('joomla.application.module.helper');
$db = JFactory::getDBO();
$db->setQuery("SELECT params FROM #__modules WHERE module = 'module'");
$module = $db->loadObject();
$moduleParams = new JRegistry();
$moduleParams->loadString($module->params);
include_once $_SERVER['DOCUMENT_ROOT'] . 'securimage/securimage.php';
$securimage = new Securimage();
if ($securimage->check($_POST['captcha_code']) == false) {
echo '<div class="error_message">' . $errorcaptchainvalid . '</div>';
exit;
}
После поиска для того, что проблема может быть, я нашел эту возможность из http://www.phpcaptcha.org/faq/:
Если имена переменных одинаковы, это может быть связано с проблемой с сеансом PHP, который используется для сохранения трассы ck пользователя и их код . Возможно, что сеанс не был запущен или более , вероятно, что имя сеанса, используемое в securimage_show.php, отличает от имени сеанса, используемого в скрипте, который выполняет проверку кода . Это распространено для других программных платформ (форумов, контента систем управления, процессоров форм и т. Д.), Чтобы использовать имя сеанса другое , чем значение по умолчанию для PHP. Если это так, вы должны определить, какое имя сеанса используется программным обеспечением, и использовать то же имя сеанса в securimage_show.php и securimage_play.php.
Имя сеанса не по умолчанию может быть передано в Securimage, чтобы он мог поделиться сеансом с другой программной платформой со следующим кодом: $ img-> session_name = «your_session_name»;
Это объясняет, почему мне не повезло с моей капчей. Я попытался редактировать вышеуказанные файлы, но я не знаю, как настроить сеансы в Joomla! или как обойти эту проблему. Является ли проблема вероятностью переменных сеанса?
securimage_show.php:
require_once dirname(__FILE__) . '/securimage.php';
$img = new Securimage();
if (!empty($_GET['namespace'])) $img->setNamespace($_GET['namespace']);
$img->show();
securimage_play.php
require_once dirname(__FILE__) . '/securimage.php';
$options = array(
'use_database' => true,
'database_name' => '',
'database_user' => '',
'database_driver' => Securimage::SI_DRIVER_MYSQL
);
$img = new Securimage();
if (!empty($_GET['namespace'])) $img->setNamespace($_GET['namespace']);
$img->outputAudioFile();
Является ли дополнительная одинарная кавычка в строке 1 вашего contact.php только тем, что вы разместили в своем вопросе? Если это не так, это может вызвать некоторые проблемы. –
Это моя ошибка, когда я написал код здесь. В файле все так, как должно. – Frostbourn