Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP输出缓冲和标头位置_Php_Authentication_Ms Access_Output Buffering - Fatal编程技术网

PHP输出缓冲和标头位置

PHP输出缓冲和标头位置,php,authentication,ms-access,output-buffering,Php,Authentication,Ms Access,Output Buffering,在我们的一台服务器上有一个非常旧的php身份验证脚本,如下所示: ob_start(); $log = new Auth(); // returns true $checkSession = $log->checkLog(); if(!$checkSession){ header("Location: ../index.php"); exit(); }else{ include "content/".$_GET["content"].".php";

在我们的一台服务器上有一个非常旧的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完全相同,$\u服务器变量在这两种情况下也是相同的。我甚至检查了同样相同的HTTP头

此外,如果我对重定向进行注释,它也会起作用:

 if(!$checkSession){

    //header("Location: ../index.php");
    //exit();

  }else{
    // that part is executed
    include "content/".$_GET["content"].".php";

   }
有人在这里遇到了同样的问题,但遗憾的是没有得到任何有效的答案:

有什么想法吗

提前感谢您的帮助

编辑:找到解决方案

出于某种原因,apache服务器不喜欢access 2000数据库生成的http请求,并发出了一个带有修改头的新请求,尤其是http accept。。。遗憾的是,第一个请求没有初始化任何会话。。。因此重定向到index.php

因此,对我来说,丑陋但有效的解决方案是:

if($_SERVER['HTTP_ACCEPT']!="*/*"){
// Do your stuff
}
试试这个:

header("Location: http://site.com/index.php");

正如@MonkeyMonkey所说的,这很可能与头文件/cookie已经发送有关,并且当脚本到达会话身份验证和重定向时,它无法重新发送它们

这将产生一个警告:如果您将错误报告设置为E_ALL,则标题已发送

现在,关于产出的起点,这一点很难确定。实际上,在ob_开始之前包含的任何文件都可能在结束之后的结尾处有空格/制表符/换行符。

在ob_开始之后添加此选项:

在此之后,检查$\u SESSION[]中的任何变量(如果已设置且具有任何值):

if(!isset($_SESSION['username']) || $_SESSION['username'] == "") {

  header("Location: ../index.php"); //redirect unauthorized users
  exit();
}
else {
 // your code
}

注意:以上代码只是一个示例,请在使用前根据您的需要进行更改。

我们无法解决您的编码问题,我们不知道具体实现。启用错误报告/显示错误并启动调试。我看没有别的办法了……这一点都没有改变。我不知道这和我的问题有什么关系,不过还是要谢谢你。
if(!isset($_SESSION['username']) || $_SESSION['username'] == "") {

  header("Location: ../index.php"); //redirect unauthorized users
  exit();
}
else {
 // your code
}