2015-03-27 3 views
1

У меня есть сайт PHP Google App Engine. У меня есть страница со следующей формы ReCaptcha:PHP Captcha Form

<?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». Все это прекрасно работает, и пользователь отправляется правильно. Но проблема в том, что пользователь может просто ввести «register.php» в URL-адрес и получить к нему доступ. Я пытаюсь сделать так, чтобы пользователь мог получить доступ только к этой странице, если была введена 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(); 
} 

ответ

0

Похоже, что вы ищете Или 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 то блок ошибок будет выполнен.

+0

Да, это то, что я думал. Я пытался, но ничего не происходит. Я все еще могу получить доступ к register.php. Может быть, потому что $ ответ с другой страницы? – Thomas

+0

О, извините, я думал, что вы это проверили, а затем сохраните его в сеансе перед перенаправлением, я отредактировал свой ответ. –

+0

Большое спасибо – Thomas