代码无法引用我之前设置的会话 (PHP 7.2)

code can't refer to Sessions I set before (PHP 7.2)

我正在使用会话向下一个站点发送成功或错误消息,我在下一个站点使用包含 php 文件来显示该消息。

由于某种原因,message.php 文件无法引用我之前设置的会话。

例如:登录脚本根据登录成功与否设置session。然后它会将您重定向到下一页,我在其中使用 message.php 作为我拥有的每个站点的包含。当之前设置会话时,这应该会在每个站点上显示一条消息。

<?php
session_start();

if (isset($_SESSION['msgType']) AND isset($_SESSION['msgMessage'])) {
  if ($_SESSION['msgType'] != "" AND $_SESSION['msgMessage'] != "") {

    if ($_SESSION['msgType'] == "error") {
      ?>
      <div class="alert alert-danger alert-dismissible fade show" role="alert">
        <strong>Fehler!</strong> <?php echo $_SESSION['msgMessage']; ?>
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <?php
    } elseif ($_SESSION['msgType'] == "warning") {
      ?>
      <div class="alert alert-warning alert-dismissible fade show" role="alert">
        <strong>Warnung!</strong> <?php echo $_SESSION['msgMessage']; ?>
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <?php
    } elseif ($_SESSION['msgType'] == "success") {
      ?>
      <div class="alert alert-success alert-dismissible fade show" role="alert">
        <strong>Erfolg!</strong> <?php echo $_SESSION['msgMessage']; ?>
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <?php
    }
  }
}

$_SESSION['msgType'] = "";
$_SESSION['msgMessage'] = "";
?>
<?php
session_start();

$_SESSION['msgType'] = "success";
$_SESSION['msgMessage'] = "some message";

?> <script> window.location = "some URL"; </script> <?php
exit;

第一个代码是 message.php 文件,其中会话在消息中被翻译。 第二个代码是一段登录脚本。设置会话并重定向的位置。

由于任何原因,根本没有显示任何消息。你能看出我的代码有什么问题吗?

此外,如果有人能告诉我,为什么我不能使用 header('Location: URL') 进行重定向而不得不使用 <script> window.location = "some URL"; </script>,请告诉我。

可以,使用 header('location : your_url')

<?php
ini_set('session.save_path',realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session')); //PUT THIS ON THE TOP
session_start();

试试看

默认 PHP session 处理是通过 header 使用 cookie。尝试设置 Location header 时出现错误这一事实表明输出已经完成。

确保您的脚本在第一个字符处以 <?php 开头且之前没有任何空格。还要确保您的编辑器没有在文件开头存储 BOM(字节顺序标记)。

另请参阅:https://en.wikipedia.org/wiki/Byte_order_mark