【问题标题】:PHP Redirection with Message带有消息的 PHP 重定向
【发布时间】:2011-04-19 14:43:03
【问题描述】:

我有一个控制器,用于显示和处理表单的回发。成功验证表单并相应处理数据后,控制器将重定向到另一个页面。

重定向完成,相当于:

@header('Status: 303 See other');
@header('Location: ' . $redirect_uri);

控制器提供要在新页面上显示的消息的最可靠方式是什么?有这方面的标准做法吗?

即“您的帐户已成功更新。”

我的想法是将动态生成的消息放入会话变量中,并在 URI 本身中用唯一 ID 指示预定义消息:

$_SESSION['previous-response-msg'] = "Account of '$user_name' was updated.";

or

$redirect_uri = 'http://example.com/other-page?msg=42';

【问题讨论】:

  • 我认为这完全是一个偏好问题。

标签: php session redirect message


【解决方案1】:

您的第二种方法是调整非安全页面内容的好方法。无论您希望消息出现在页面的哪个位置,都可以...

if (isset($_GET['msg']) && $_GET['msg'] == '42') {
    echo '<div>Your account was successfully updated</div>';
}

我认为很简单。

【讨论】:

    【解决方案2】:

    会话变量中的一次消息对我来说效果很好。我在这里看不出什么问题,尤其是对于状态类型的消息。

    如果你使用的是框架,它很可能是内置的。。

    【讨论】:

    • 如果同一会话中的同一用户同时执行两次回发,是否有可能两者都使用相同的消息进行重定向(即使消息可能需要不同)?跨度>
    • 我为内部应用程序执行此操作(在会话中保存消息并在下一页加载时显示(并从会话中删除它))。效果很好。唯一的怪癖是有时用户在两个选项卡中处理两个页面的速度非常快,并且两个选项卡的两条状态消息出现在一个选项卡中,而不是一个选项卡中的一条消息和另一个选项卡中的另一条消息。为此,您需要在会话中保存一组消息,而不仅仅是一条消息。
    • @Carlos 如何将正确的消息映射到正确的页面?使用 $_GET 查询参数?
    • 我没有在任何地方映射消息。我只是把它保存到$_SESSION["msgs"][]。然后它将显示在加载的下一页上,无论它是什么,无论它是浏览器中的哪个选项卡。这是一个内部应用程序,使用它的用户知道这种奇怪的行为,所以对我们来说没关系。对于一个公共网站,它可能不是那么好。
    • 另外,由于服务器上的一些错误配置,每个页面至少需要 2 秒才能开始处理请求,所以这就是为什么有时用户可以在两个不同的选项卡中处理两个页面,生成两条会话消息,但是这不应该在正常环境中发生。
    【解决方案3】:

    使用会话将允许更灵活的消息,但任何一种方式都可以。没有我知道的“最佳实践”。

    【讨论】:

      【解决方案4】:

      你能不能不使用 ajax 然后添加一个成功和失败回调来显示来自你发送数据的文件的响应数据?

      【讨论】:

      • 我在某些地方使用了AJAX,但是有几个地方我觉得页面的变化是非常重要的。就像删除用户帐户时一样,我不喜欢使用 AJAX 进行这种活动,因为我觉得页面的变化强调了这种程序的破坏性。
      • 是的,我想当用户知道或看起来好像它发生时会感到轻松
      猜你喜欢
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 2019-12-14
      • 2020-10-12
      • 2013-04-04
      相关资源
      最近更新 更多