我正在使用此代码重定向我的用户,从而阻止了他们浏览器中只有ajax的页面
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {}
else {
header("Location: /");
}
它在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');
}
});
接着
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'))
不知道它是否会在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'
}
});
然后您可以执行以下操作:
if((isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ||
$_GET['ajax']==1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。