发送header()后,$ _ SESSION消息未设置

时间:2019-02-15 23:30:10

标签: php session

已解决 | 更新由于要找到解决方案并不容易,因此我在下面发布了答案。希望这将有助于其他人在stackoverflow上更轻松地找到解决方案。

我有自己的功能来设置和显示消息。这些消息存储在会话中。我想要实现的是在提交表单后立即显示一条消息。除非我使用header()函数重新加载页面或重定向到另一个页面,否则它会起作用。

我在标题的顶部使用ob_start()session_start()。所以这两个一直都在。

我的信息是通过以下功能设置的。它会创建一条成功或危险类型的消息,并将其存储在会话变量中。

protected function setMsg($text, $type) {
        if($type == 1) {
            $_SESSION["message"] = '<div class="alert green"><p>'.$text.'</p></div>';
        } elseif($type == 0) {
            $_SESSION["message"] = '<div class="alert red"><p>'.$text.'</p></div>';
        }
    }

另一个功能仅显示一次消息,之后将其取消设置。

public function showMsg() {
        if(isset($_SESSION["message"]) && !empty($_SESSION["message"])) {
            echo $_SESSION["message"];
            unset($_SESSION["message"]);
        }
    }

这是我的表单提交代码的最后一部分:

$this->setMsg("User has been created", 1);
header("Location: users_list.php");

如果我不使用header()函数,那就没问题了。但是我必须使用它。

消息功能在标题中被调出,但在所有其他功能下面:

<?php $data->showMsg(); ?>

因此,页面似乎以某种方式被重定向了两次。第一次设置该消息后,第二次刷新后,我看不到它。所以我根本看不到。

我做错什么事情了?

1 个答案:

答案 0 :(得分:1)

最后我明白了。在这种情况下,我只需要在调用numpy.hstack函数之后立即插入Settings (Preferences on macOS) | Editor | General | Strip trailing spaces on Save。就是这样。