标头位置在一个文件中有效,但在另一个文件则无效


header location works in one file, but not in the other

我有如下代码:

<?php
session_start();
require_once 'classes/cookie.class.php';
if(!isset($_SESSION['logged']) && !Cookie::checkCookie($_COOKIE['smt_auth']))
{
    header('Location: login.php');
    exit;
}

?>

它在localhost中正常工作,因为如果用户没有登录,也没有cookie,它总是重定向到login.php。但问题来了,当我试图把这些文件放在主机上,它停止了工作。

使用它的两个文件是index.php和temario.php,当我尝试引入index.php的url时,它会将我重定向到login.php,但在temario.hp中,屏幕会变为空白,不会重定向。

这两个文件都有相同的PHP块(当我从index.PHP复制粘贴到temario.PHP时,没有空格),所以有人知道为什么这不能在主机上工作,但在带有examplep的localhost上工作吗?

它抛出了错误:

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /homepages/3/d507876316/htdocs/new/usuario/temario.php:1) in /homepages/3/d507876316/htdocs/new/usuario/temario.php on line 4

此外,如果我复制index.php并重命名它,它也可以按预期工作。

提前谢谢。

在将任何正文内容发送到浏览器之前,您需要session_start一个cookie集。因此,请检查代码块之前是否有任何echo、纯html甚至空白。还要检查php标记前后的空白。您应该省略php文件末尾的php结束标记。

<?php ob_start(); ?>放在代码的开头,将<?php ob_flush(); ?>放在编写头重定向代码的页面的末尾。