1

以下标头功能不起作用。如果用户未登录,我会尝试登录 -

    <?PHP
    if (logged_in() === false) {
    header('Location: login.php');
    }
    ?>

但是,如果我这样做 -

    <?PHP
    if (logged_in() === false) {
    echo"No user is logged in";
    }
    ?>

它确实回显它,我可以看到它说没有用户登录

它基本上只是检查是否有用户登录

    function logged_in() {
    return (isset($_SESSION['user_id'])) ? true : false;
    }
4

3 回答 3

2

尝试将exit()或die()放在标题之后

  if (logged_in() === false) {
      header('Location: login.php');
      exit();    //or die();
  }

但请确保您的 login.php 应该在同一个文件夹中

于 2013-06-07T05:15:13.737 回答
1

确保您的代码中没有输出(也有空格)。

您可以使用 ob_start() 和 ob_end_flush() 清除输出。

<?php ob_start();

 // code 

ob_end_flush(); ?>
于 2013-06-07T05:45:18.290 回答
0

您可能需要包含完全限定的域和新 url 的路径。标题函数的官方文档中有一个注释,说明了这一点。

笔记:

HTTP/1.1 需要绝对 URI 作为 » Location 的参数:包括方案、主机名和绝对路径,但有些客户端接受相对 URI。您通常可以使用 $_SERVER['HTTP_HOST']、$_SERVER['PHP_SELF'] 和 dirname() 自己从相对的 URI 中创建绝对 URI:

本说明还包含以下代码示例。

<?php 
/* Redirect to a different page in the current directory that was requested */ 
$host  = $_SERVER['HTTP_HOST']; 
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); 
$extra = 'login.php';
header("Location: http://$host$uri/$extra"); 
exit; 
?>
于 2013-06-07T05:23:55.970 回答