检测PHP文件是否直接加载

Cam*_*ron 0 php

我正在使用一些PHP页面做一些AJAX的东西,但我不希望它们可以直接访问.Facebook做了类似的事情,例如:domain.com/ajax/my_ajax_form.php

如果我要使用AJAX加载该页面它可以正常工作,但如果用户尝试通过键入该URL直接加载文件,它将通过错误进行,例如,

if( IS FILE LOADED DIRECT? )
{
header ( HTTP/1.0 404 );
}
Run Code Online (Sandbox Code Playgroud)

nik*_*org 5

您可以查找HTTP_X_REQUESTED_WITH标题.

$is_ajax = array_key_exists('HTTP_X_REQUESTED_WITH', $_SERVER) 
           && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest';

if (! $is_ajax) {
    die('go away.');
}
Run Code Online (Sandbox Code Playgroud)

但请注意,它不是标准的,但需要在请求方明确设置.AFAIK,至少jQuery和Mootools设置了它,可能大多数其他设置它,但不要相信我的话.


Bra*_*rad 5

这是不可能的.你不能依赖$_SERVER['HTTP_X_REQUESTED_WITH'],即使你可以,也无所谓.任何人都可以通过POST或发送与浏览器相同的请求GET.

您应该做的是验证请求,如果有效则返回正确的结果.如果它无效,请不要返回404.(浏览器可以缓存404之类的错误.如果您的客户端代码出现问题,后续请求可能会失败!)如果请求无效,则返回某种错误.

同样,不可能保证这样的东西.您应该验证会话并请求数据.就这样.