Joomla 3.3会话和securimage验证码

时间:2014-12-15 13:43:32

标签: joomla

我正在为我的模块构建一个表单,最后一步是通过验证码检查以确保安全性。我已经下载了最新版本的securimage。验证码显示正确,可以生成新的验证码。但是,在发布表单后,检查是否正确输入验证码的建议技术永远不会返回true。

的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会话   代码是。会话可能未启动或更多   可能是securimage_show.php中使用的会话名称不同   从执行代码的脚本中使用的会话名称   验证。其他软件平台(论坛,内容)很常见   管理系统,表单处理器等)使用其他会话名称   比PHP默认。如果是这种情况,您必须确定是什么   会话名称由软件使用,并使用相同的会话名称   securimage_show.php和securimage_play.php。

     

非默认会话名称可以传递给Securimage,以便它可以共享   与另一个软件平台的会话,代码如下:   $ img-&gt; 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 个答案:

答案 0 :(得分:0)

你的中途 - 问题是Joomla处理会话的方式。

表示,不要将表单放在文章中,而是尝试通过iframe嵌入表单。