使用后清除会话变量

ste*_*ton 12 php forms session post login

是否可以使用会话变量,然后直接取消设置?

例:

//====
//Process Form
if ($_POST['Submit']) {
    $update = $userSettings->update($_POST);

    //If there are form errors
 if (!$update) {
        //Load the errors into an array
        $errors = $update[1];
    } else {
        //Set the session
        $_SESSION['showUpdated'] = true;

        //Redirect to this page
        header("Location: http://www.mysite.com/settings");
    }
}

//==================

if ($_SESSION['showUpdated']) {
 echo "Settings Updated";
    unset($_SESSION['showUpdated'];
}
Run Code Online (Sandbox Code Playgroud)

因此,在提交表单后,如果没有错误:

  • 设置会话以表示表单提交是可以的
  • 重新加载页面(以防止重新提交POST数据)
  • 如果设置了"showUpdated"会话变量,则显示"已更新"消息
  • 取消设置会话变量(因此我们在下次重新加载时看不到该消息)

目前的问题是,如果你直接取消设置会话变量; 就好像你在"if exists"部分之前取消了它.

有解决方案吗 这甚至是最好的方法吗?

非常感谢!

don*_*aur 23

我注意到原始示例中的一个小错误可能会导致其他问题.

unset($_SESSION['showUpdated'];
Run Code Online (Sandbox Code Playgroud)

需要是

unset($_SESSION['showUpdated']);
Run Code Online (Sandbox Code Playgroud)

不包括为此)unset会导致错误.


Sco*_*ers 3

看起来应该可以。确保在尝试使用会话之前调用 session_start(),并且始终在重定向标头之后调用 exit() 或 die()。

我完成你正在做的事情有点不同。我在会话中保留一个“消息”元素。我将粘贴“您的数据已保存”、错误消息等文本。然后,在每个页面上(实际上在页面模板类中),我检查是否已$_SESSION['message']设置且不为空。如果那里有东西,我会显示消息并将值设置为空字符串或 null。