【问题标题】:PHP Captcha FormPHP 验证码表单
【发布时间】:2015-03-28 08:42:05
【问题描述】:

我有一个 Google App Engine PHP 网站。我有一个带有以下 recaptcha 表单的页面:

<?php   
    ob_start(); 


    if($_SERVER["REQUEST_METHOD"] === "POST")
    {
    //verify captcha
    $recaptcha_secret = "6LfkBQMTAAAAABN5yEqoqxoLqKOBKIvoCHZ-3vP3";
    $response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$recaptcha_secret."&response=".$_POST['g-recaptcha-response']);
    $response = json_decode($response, true);
    while (ob_get_status()) 
    {
    ob_end_clean();
    }
    if($response["success"] === true)
    {
     echo '<META HTTP-EQUIV="Refresh" Content="0; URL=register.php">';    
     exit;    
    }
    else
    {
        echo "Please try again";
    }
    }
    ?>

一旦用户输入正确的验证码,他们就会被发送到“register.php”。这一切正常,用户被正确发送。但问题是用户可以在 URL 中输入“register.php”并访问它。我试图让用户只有在输入了recaptcha 后才能访问此页面。 (recaptcha 在与“register.php”不同的页面上)。

当用户登录时,我正在使用会话,所以在 register.php 上有这个,这需要留在那里:

<?php
session_start();
if ( !isset($_SESSION['username']) )
{
header("Location:error.php");
exit();
}  
?>

有没有办法做类似的事情:

<?php
session_start();
if ( !isset($_SESSION['username']) )
{
 header("Location:error.php");
exit();
}
and ($response["success"] === false)
header("Location:error.php");
exit();
}

【问题讨论】:

    标签: php google-app-engine session captcha recaptcha


    【解决方案1】:

    好像你正在寻找或logical operator,保存重定向前的值:

    if($response["success"] === true)
    {
        $_SESSION['success'] = true;
        echo '<META HTTP-EQUIV="Refresh" Content="0; URL=register.php">';
        exit;
    }
    

    现在添加一个新的检查:

    <?php
    session_start();
    if ( !isset($_SESSION['username']) || $_SESSION['success'] != true )
    {
        header("Location:error.php");
        exit();
    }  
    ?>
    

    如果这些表达式中的任何一个是true,则将执行错误块。

    【讨论】:

    • 是的,我就是这么想的。我试过了,但什么也没发生。我仍然可以访问 register.php。可能是因为 $response 来自其他页面?
    • 抱歉,我以为你已经检查过了,然后在重定向之前将其保存在会话中,我编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2012-02-13
    • 1970-01-01
    相关资源
    最近更新 更多