use*_*661 3 javascript php ajax firefox
我正在使用此代码重定向我的用户,阻止浏览器中的 ajax 页面
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {}
else {
header("Location: /");
}
Run Code Online (Sandbox Code Playgroud)
它在 Google chrome、Firefox 26 和 IE11 上运行良好,但是在 Firefox 4 中,即使使用 ajax 加载也会触发标头。
我怎样才能解决这个问题?
您可以尝试自己设置 HTTP_X_REQUESTED_WITH 标头,或者设置不同的标头并检查它:
$.ajaxSetup({
beforeSend: function (request)
{
request.setRequestHeader("HTTP_X_REQUESTED_WITH",'xmlhttprequest');
request.setRequestHeader("BACKUP_FIREFOX_AJAX", 'xmlhttprequest');
}
});
Run Code Online (Sandbox Code Playgroud)
进而
if((isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ||
(isset($_SERVER['BACKUP_FIREFOX_AJAX']) &&
strtolower($_SERVER['BACKUP_FIREFOX_AJAX']) == 'xmlhttprequest'))
Run Code Online (Sandbox Code Playgroud)
不确定它是否会工作,因为它是 Firefox 4(非常旧的版本),但值得一试。
好的,在进一步挖掘时,似乎有一个旧的 Firefox 错误,其中 1) 如果 xhr 被重定向,则自定义标头将丢失,以及 2) 当“自动代理检测”运行时,firefox 有时会执行触发的内部重定向1中的问题。
因此,您可能需要做除标头以外的其他事情...也许将查询字符串参数附加到所有传出的 ajax 请求中,我不确定您是否需要直接修改 url 或 GET 请求的数据,所以我只是做两者并希望它有效:
$.ajaxSetup({
beforeSend: function(jqXHR, settings) {
if (settings.url.split('?').length > 1) {
settings.url = settings.url + '&ajax=1';
}
else {
settings.url = settings.url + '?ajax=1';
}
},
data: {
ajax: '1'
}
});
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
if((isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ||
$_GET['ajax']==1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4308 次 |
| 最近记录: |