2016-01-30 2 views
0

Возможно ли, что PHP только реагирует на запросы ajax? Путем установки заголовков и т.д. , например, мы имеем следующий код:PHP: ответьте только на запрос ajax

if (str.length == 0) { 
    document.getElementById("txtHint").innerHTML = ""; 
    return; 
} else { 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      document.getElementById("txtHint").innerHTML = xmlhttp.responseText; 
     } 
    }; 
    xmlhttp.open("GET", "gethint.php?q=" + str, true); 
    xmlhttp.send(); 
} 

и мы хотим, чтобы сделать AJAX запрос. Теперь, когда мы набираем 'SITENAME.COM/gethint.php?q=' в браузере, он показывает что-то. Как предотвратить это событие? спасибо.

+0

Возможный дубликат http://stackoverflow.com/questions/8553611/verifying-xmlhttprequest-in-php –

+0

вы можете использовать метод пост я предполагаю –

+1

Почему вы обеспокоены тем, что кто-то может поставить URL в браузере и посмотреть содержимое? Вы знаете, что все, что отправлено через сеть, в конечном счете может быть проверено в пункте назначения? –

ответ

5

Вы не можете гарантировать, что кто-то не сможет получить доступ к этому на не вызов Ajax, но следующий может помочь предотвратить не-Ajax запросы:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) 
    && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
    // more code here 
} 

HTTP заголовки являются довольно легко установить , так что это не было бы чем-то, чтобы обеспечить его ... Только запретить обычным пользователям напрямую ударять страницу.

+0

спасибо, что это работает. –

0

Вы можете попробовать это.

if (strtolower(filter_input(INPUT_SERVER, 'HTTP_X_REQUESTED_WITH')) === 'xmlhttprequest') { 
    // I'm AJAX! 
} 
Смежные вопросы