【问题标题】:PHP Echos and headers - Echos not being outputtedPHP Echos 和 headers - Echos 没有被输出
【发布时间】:2019-04-25 18:24:36
【问题描述】:

我有一个部分,如果会话变量用户名不存在,应用程序应该输出一条错误消息,指出需要凭据,然后将用户重定向到登录页面。问题是,只有后者正在发生,并且没有输出“错误消息”。

<?php if (!isset($_SESSION['username'])){  
    ob_start();
    echo "<script type='text/javascript'>alert('Not logged in. Please input required credentials.');</script>";
    header('location: /se7en/login.php');
    ob_end_flush();

}
?>

我尝试使用 输出缓冲区 来解决这个问题,但是,同样的问题一直在发生。请问这个怎么解决?

非常感谢!

【问题讨论】:

  • 在设置标题之前你不应该输出任何东西,并且你试图从你试图显示输出的页面重定向......因为你正在使用会话变量(或缺少),你为什么不只是检查你重定向到的页面并在那里显示文本?
  • 如何使用 javascript 进行重定向? window.location.replace("/se7en/login.php");
  • 就像@cteski 所说,您正在打印到一个页面,然后从该页面重定向。你永远不会看到那个消息。我会做一个回答,告诉你我通常是如何处理这个的

标签: php html header echo output-buffering


【解决方案1】:

我通常通过让我重定向的页面来发布消息来处理这种需求。一种方法是:

<?php if (!isset($_SESSION['username'])){  
    ob_start();
    header('location: /se7en/login.php?message=Not logged in. Please input required credentials.');
    ob_end_flush();

}
?>

然后在您的 login.php 中您将拥有

if ( ! empty( $_GET['message'] ) ) {
    $message = htmlspecialchars( $_GET['message'] );
    echo "<script type='text/javascript'>alert('$message');</script>";
}

您也可以只传递一个消息编号 (message=1),然后在 login.php 文件中的数组中包含所有可能的消息:

$messages = array(
    1 => "Not logged.....",
    2 => "something else...",
    //...
);
if( ! empty( $_GET['message'] ) && ! empty( $messages[ $_GET['message'] ] ) {
    echo "<script type='text/javascript'>alert('{$messages[ $_GET['message'] ]}');</script>";
}

【讨论】:

  • 不客气。顺便说一下,第二种方式更安全。
【解决方案2】:

我同意@khartnett。

由于您正在进行标题重定向,它会在您有机会显示警告框之前重定向页面。

如果你这样做:

<?php if (!isset($_SESSION['username'])){  
ob_start();
echo "<script type='text/javascript'>" .
          "alert('Not logged in. Please input required credentials.');" .
          "window.location.href = '/se7en/login.php';" .
     "</script>";
header('location: /se7en/login.php');
ob_end_flush();
}
?>

然后,它将显示阻止进一步执行脚本的警告框,直到按下 OK,然后继续通过 window.location.href 重定向。

【讨论】:

    猜你喜欢
    • 2012-04-17
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多