Как отследить ajax-запрос или отличить его от обычного с помощью php

В целях безопасности порой бывает важно проверить тип запроса, идущего к вам на сервер и отследить ajax-запрос.

Для того, чтобы определить, идёт ли к нам ajax запрос, необходимо использовать параметр суперглобального массива $_SERVER[‘HTTP_X_REQUESTED_WITH’].
Для тех кто не в курсе, Ajax запрос = запросу xmlhttprequest. Однако, следует помнить, нет никакой гарантии, что каждый веб-сервер будет предоставлять данное значение в суперглобальном массиве $_SERVER.

Пример кода отслеживания:

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    // Если к нам идёт Ajax запрос, то ловим его
    echo 'Это ajax запрос!';
    exit;
}
//Если это не ajax запрос
echo 'Это не ajax запрос!';
  • Unlimit

    А можно проверку оформить в виде функции:

    function isAJAX() {    return !empty($_SERVER[‘HTTP_X_REQUESTED_WITH’])            ? strtolower($_SERVER[‘HTTP_X_REQUESTED_WITH’]) == ‘xmlhttprequest’             : false;}

    Но я бы все равно не стал полагаться на этот заголовок, т.к. будет ли этот заголовок обработан задан или нет зависит от настроек конкретного сервера.

    • Аноним

      я об этом и писала, но это единственный способ проверить происхождение запроса

      • Unlimit

        Я просто еще раз уточнил. Кстати дискус не поддерживает подсветку кода?

        • Аноним

          судя по всему, нет :)