簡體   English   中英

如何在php中檢測ajax跨域請求

[英]How to detect ajax cross domain request in php

對於我使用的普通 ajax 請求:

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

但這不適用於跨域請求。

我能怎么做?

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']工作正常。

如果我在本地計算機上使用頁面,則此超全局變量返回一個空字符串。

如果我使用的是 Internet 上的頁面,則$_SERVER['HTTP_REFERER']值返回進行 ajax 調用的頁面的 URL。 所以檢查 this 的值可以告訴你你需要知道什么。

要檢測 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);
}

使用 $_SERVER['HTTP_ORIGIN'] 獲取請求域

您可以使用 php 的 getallheaders() 函數。 您可以檢查主機條目

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM