在我们的一台服务器上有一个非常古老的 php 身份验证脚本,如下所示:
ob_start();
$log = new Auth();
// returns true
$checkSession = $log->checkLog();
if(!$checkSession){
header("Location: ../index.php");
exit();
}else{
include "content/".$_GET["content"].".php";
}
$content = ob_get_contents();
ob_end_clean();
include "../".WEBROOT_TEMPLATE_FILE;
它总是运行顺利(经过身份验证的用户能够访问该页面,未经身份验证的用户被重定向到主页)......直到今天!
由于一些完全未知的原因,当用户试图从一个由 access 2000 数据库生成的链接访问服务器页面之一时,他们总是被重定向到 index.php。
奇怪的是,将 url 直接粘贴到浏览器中时效果很好。url 是完全一样的,$_SERVER 变量在两种情况下也是一样的。我什至检查了同样相同的 HTTP 标头。
此外,如果我评论重定向,它确实有效:
if(!$checkSession){
//header("Location: ../index.php");
//exit();
}else{
// that part is executed
include "content/".$_GET["content"].".php";
}
有人在这里遇到了同样的问题,但遗憾的是没有收到任何有效的答案:PHP if-statement ignored when header(Location: xxx) is inside
任何想法 ?
在此先感谢您的帮助,
编辑:找到解决方案
出于某种原因,apache 服务器不喜欢由 access 2000 数据库生成的 http 请求,并发出了一个带有修改头的新请求(尤其是 http 接受)......遗憾的是,第一个请求没有初始化任何会话...因此重定向到 index.php。
所以(丑陋但有效的)解决方案对我来说是:
if($_SERVER['HTTP_ACCEPT']!="*/*"){
// Do your stuff
}