如何在php中检测ajax跨域请求

时间:2012-04-03 16:42:28

标签: php ajax cross-domain jsonp

对于正常的ajax请求,我使用:

strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'

但这不适用于跨域请求。

我该怎么办?

4 个答案:

答案 0 :(得分:2)

<强> EDIT2: 如果你以这种方式使用jQuery.ajax函数:

var request = $.ajax({
url: "http://somesite.com/somescript.php?somevar=somevalue",
dataType: "jsonp",
jsonp: 'callback',
success: function(data) {
alert('Done!');
}
});

然后,您可以查看$_SERVER['REQUEST_URI']变量,或只是$_GET['callback']$_GET['_']。 REQUEST_URI将如下所示:

/somescript.php?somevar=somevalue&callback=jQuery172028849187534502896_1333494007273& _ = 1333494443880

编辑:下面的答案是找出它是否是跨域的,而不是检查它是否是AJAX

“如何确定ajax呼叫是否来自不同的域”这一问题的答案是:

我正在使用jQuery.ajax调用,对我来说使用变量$_SERVER['HTTP_REFERER']工作正常。

如果我在本地计算机上使用某个页面,则此超级全局返回一个空字符串。

如果我在互联网上使用某个页面,$_SERVER['HTTP_REFERER']的值将返回进行ajax调用的页面的URL。因此,检查此值可以告诉您需要了解的内容。

答案 1 :(得分:0)

使用$ _SERVER [&#39; HTTP_ORIGIN&#39;]获取请求域

答案 2 :(得分:0)

要检测Ajax和CrossDomain请求,请尝试以下操作:

function is_ajax_request() {
    return isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) ? $_SERVER['HTTP_X_REQUESTED_WITH'] : false === 'XMLHttpRequest';
}


function check_cross_domain($referrer, $host) {
    $referrer = str_ireplace( 'www.', '', parse_url( $referrer, PHP_URL_HOST ) );
    $pattern = '/' . $host . '/';
    return preg_match($pattern, $referrer);
}

答案 3 :(得分:-1)

你可以使用php的getallheaders()函数。你可以查看主持人条目