【问题标题】:Best way to supply success messages when redirecting?重定向时提供成功消息的最佳方式?
【发布时间】:2012-06-15 08:14:42
【问题描述】:

我正在寻找在重定向后向页面提供成功消息的最佳方式。我认为表单提交后重定向是防止表单多次提交的最佳方法。

以下是我想到的一些可能性。您认为其中最好的部分是什么?为什么或者您还有其他可能性?

  • 将消息保存在会话中并从目标页面上读取
  • 为新页面提供一些 GET 参数,例如 header('Location: index.php?success='.urlencode($message));
  • 提供比Location 更多的标头并像这样在目标页面上阅读它们

    header('Location: index.php');
    header('X-Success-Message: ' . urlencode($message));
    

【问题讨论】:

  • 在我的代码中,我使用会话来传递此类消息。唯一要记住的是在阅读完这些消息后从会话中删除它们。
  • 在会话中存储可能是最整洁的。
  • 我在这里提供了一个 PHP 等效的 ASP.NET MVC TempData stackoverflow.com/questions/7514172/…
  • 如果您使用的是 ZF,flash messenger 是一个很好的解决方案。
  • @JA:我知道会话方法主要来自 ZF。这种方法的最大问题是单个消息的生命周期。在极少数情况下,会话消息可能会保留在会话中而不会被删除。例如,使用标头方法,消息具有固定的请求生命周期。

标签: php http redirect


【解决方案1】:

这是我的看法:

会话。

您在会话中存储的所有数据都将存储在服务器上。默认位置是磁盘。 IO - 是一种非常有限的资源。不要在不需要时开始会话。不要在不需要时将数据存储在会话中。

为新页面提供一些 GET 参数。

这是一种很好的做法,但有一个不足之处。如果客户将链接存储在他的收藏夹中(等等......)将其提供给另一个用户,然后他打开此链接,那么他将看到成功消息。

提供多于 Location 标题并在目标页面上阅读它们。

这是一个很好的方法,但它取决于应用程序和客户端中间的服务器配置和代理。有时服务器配置(代理)会杀死非标准标头。但通常这不是问题。

将此数据存储在 cookie 中。

缺乏:

  • 不要忘记删除 cookie。
  • 存储在 cookie 中的所有数据都将从您的服务器传输到客户端并返回。

将此数据存储在服务器上。

存储在数据库、memcache、NoSQL 等中。如果这不会在服务器上产生额外的负载并且非常适合您的应用程序,为什么不呢?而且您不一定需要存储消息本身,而只需要存储状态标志。

在实践中,我使用了所有这些方法。目前应该使用哪种方法 - 查看应用程序的要求及其未来用途。

【讨论】:

  • 只是为了让您知道我采用了 Session 方法,就像 ZF 使用它的 FlashMessenger 类一样。
【解决方案2】:

将消息保存在数组或配置文件中。

如果您更喜欢使用会话(或框架的闪存数据),只需存储要显示的消息的键即可。

如果您更喜欢 GET 解决方案,请使用您要显示的消息的键传递参数。

如果您使用 GET 并希望避免用户为包含消息的页面添加书签,则可以在会话中使用布尔变量,以便仅当此变量设置为 1 时才显示消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    相关资源
    最近更新 更多