【问题标题】:PHP Session-Based flash messagePHP 基于会话的 flash 消息
【发布时间】:2015-08-14 17:00:06
【问题描述】:

我正在尝试在 PHP 中创建基于会话的 flash 消息:

在 register.php 页面中,我将会话设置如下:

$_SESSION['flash'] = 'Registered';

然后,在将用户重定向到主页后,我打印了 flash 消息:

if (isset($_SESSION['flash'])) {
   echo $_SESSION['flash'];
   unset($_SESSION['flash']);
}

会话在两个页面中开始。 问题是: 只有当我删除未设置的功能时,我才会在主页中收到 Flash 消息,然后始终打印该消息。

【问题讨论】:

  • 可能你的主页被执行了两次,所以你在第一次执行时删除了消息,然后第二次就没有什么可打印的了。
  • 你能放更多代码吗 plz ..需要看看你是如何重定向的。
  • 我确定主页执行一次。否则,对于重定向,我在设置会话后使用 header('Location: Home.php') 。但是,有关更多信息,我打印消息的代码位于文件 Message.php 中,然后该文件包含在另一个文件中,该文件包含 HTML 标头,最后包含在每个页面中。经过数小时的测试,我发现当我将 Message.php 文件从 Header 文件直接移动到 Home 页面时,问题得到了解决,但这并不是一个真正的好习惯,因为我想要所有页面中的 Message.php 文件,所以有什么想法吗?

标签: php flash session


【解决方案1】:

我专门为此类问题编写了一个库:https://github.com/tamtamchik/simple-flash

一旦你安装了它,你可以这样做:

// put message not session
flash('Some error message', 'error');

// print it after redirect
echo flash()->display(); 

它将生成Bootstrap 友好的警报消息。

【讨论】:

    【解决方案2】:

    我刚刚解决了我的问题,在重定向用户后添加退出以逃避注册页面的执行,因此在下一页使用之前不会在当前页面取消设置会话。

    【讨论】:

      【解决方案3】:

      请注意 session_unset 只是清除 sesison 以供使用。会话仍在用户计算机上。请注意,通过使用 session_unset,变量仍然存在。

      然而,将 session_unset 与 session_destroy 结合使用是一种更有效的实际清除数据的方法。如上例所述,效果很好,跨浏览器:

      <?php
      session_unset();
      session_destroy();
      ?>
      

      【讨论】:

      • 感谢您的回答,但我认为您没有理解问题,究竟发生了什么:会话在使用之前未设置,因此我没有在页面中收到消息。但是,当我删除未设置时,我总是会在刷新页面后收到我希望它消失的消息。
      猜你喜欢
      • 2011-08-26
      • 2023-04-03
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多