Php 检测Ajax调用URL
我有一个HTML文档,它使用AJAX调用从PHP文件加载内容。我的代码的重要部分如下: default.html:Php 检测Ajax调用URL,php,javascript,html,ajax,Php,Javascript,Html,Ajax,我有一个HTML文档,它使用AJAX调用从PHP文件加载内容。我的代码的重要部分如下: default.html: /*more code above*/ var PHP_URL = "content.php"; var Content = document.getElementById('Content'); ajaxRequest = new XMLHttpRequest(); ajaxRequest.onreadystatechange = function() {
/*more code above*/
var PHP_URL = "content.php";
var Content = document.getElementById('Content');
ajaxRequest = new XMLHttpRequest();
ajaxRequest.onreadystatechange =
function() {
if(ajaxRequest.readyState==4) {
if (ajaxRequest.status==200)
Content.innerHTML = ajaxRequest.responseText;
else
Content.innerHTML = "Error:<br/>unable to load page at <b>"+PHP_URL+"</b>";
Content.className = "Content Solid";
}
}
ajaxRequest.open("GET",PHP_URL,true);
ajaxRequest.send();
/*more code below*/
/*以上更多代码*/
var PHP_URL=“content.PHP”;
var Content=document.getElementById('Content');
ajaxRequest=新的XMLHttpRequest();
ajaxRequest.onreadystatechange=
函数(){
if(ajaxRequest.readyState==4){
if(ajaxRequest.status==200)
Content.innerHTML=ajaxRequest.responseText;
其他的
Content.innerHTML=“错误:
无法在“+PHP_URL+”加载页面;
Content.className=“内容实体”;
}
}
打开(“GET”,PHP_URL,true);
ajaxRequest.send();
/*下面有更多代码*/
位于“content.php”的文件是否可能检测到它已从“default.html”调用,或根据需要从其他调用文档调用?
$\u服务器['HTTP\u REFERER']
可能是您想要的
参考文献
/*more code above*/
var PHP_URL = "content.php?mode=AJAX";
var Content = document.getElementById('Content');
ajaxRequest = new XMLHttpRequest();
ajaxRequest.onreadystatechange =
function() {
if(ajaxRequest.readyState==4) {
if (ajaxRequest.status==200)
Content.innerHTML = ajaxRequest.responseText;
else
Content.innerHTML = "Error:<br/>unable to load page at <b>"+PHP_URL+"</b>";
Content.className = "Content Solid";
}
}
ajaxRequest.open("GET",PHP_URL,true);
ajaxRequest.send();
/*more code below*/
/*以上更多代码*/
var PHP_URL=“content.PHP?mode=AJAX”;
var Content=document.getElementById('Content');
ajaxRequest=新的XMLHttpRequest();
ajaxRequest.onreadystatechange=
函数(){
if(ajaxRequest.readyState==4){
if(ajaxRequest.status==200)
Content.innerHTML=ajaxRequest.responseText;
其他的
Content.innerHTML=“错误:
无法在“+PHP_URL+”加载页面;
Content.className=“内容实体”;
}
}
打开(“GET”,PHP_URL,true);
ajaxRequest.send();
/*下面有更多代码*/
如果仅仅检测来自default.html的调用就足够了(并且不区分AJAX调用或单击的链接),那么检查referer头就可以了,正如@Jamie Wong所建议的那样。我想最好是在AJAX调用中设置请求头,例如
st.setRequestHeader('X-Sent-From','default.html')
然后在content.php中
$sentFrom=$_SERVER['HTTP_X_SENT_FROM']; // outputs default.html
大多数著名的Ajax框架,如jQuery和mooTools,都会添加一个特定的头文件,您可以使用PHP进行检查:
if (strcasecmp('XMLHttpRequest', $_SERVER['HTTP_X_REQUESTED_WITH']) === 0)
{
// Ajax Request
}
您不能依赖HTTP_REFERER总是被填充。同意-但我能想到的唯一其他替代方法是生成存储在会话中的唯一哈希,并将其包含在AJAX请求中,然后检查用户的会话以查看其来源。这有点难看,可能有点过头了。我没有想到——在jQuery中,您会使用
beforeSend
回调来实现这一点,还是有更简单的方法呢?我经常使用jQuery,但不用于AJAX调用。然而,据我所知,我会在发送前使用