2014-12-15 4 views
1

Я создаю форму для своего модуля, и последний шаг - передать контрольную проверку для обеспечения безопасности. Я загрузил последнюю версию 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(); 
+0

Является ли дополнительная одинарная кавычка в строке 1 вашего contact.php только тем, что вы разместили в своем вопросе? Если это не так, это может вызвать некоторые проблемы. –

+0

Это моя ошибка, когда я написал код здесь. В файле все так, как должно. – Frostbourn

ответ

0

Ваш полпути - проблема как Joomla обрабатывает сеансы. Вместо того, чтобы размещать форму в статье, попробуйте внедрить форму через iframe, и она должна работать нормально.

+0

Это похоже на ответ. Возможно, какой-то примерный код для демонстрации сделает этот ответ более качественным. –

Смежные вопросы