【问题标题】:$_SESSION message gets unset after header() is sent$_SESSION 消息在 header() 发送后被取消设置
【发布时间】:2019-02-15 23:30:10
【问题描述】:

已解决 | 更新: 由于找到解决方案并不容易,我将答案贴在下面。希望这将帮助其他人在 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(); ?>

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

我做错的可能性更大?

【问题讨论】:

标签: php session


【解决方案1】:

我终于想通了。在这种特殊情况下,我只需要在调用header() 函数后立即插入exit()。就是这样。

【讨论】:

    猜你喜欢
    • 2011-09-27
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多