重定向时提供成功消息的最佳方式


Best way to supply success messages when redirecting?

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

以下是我脑海中浮现的一些可能性。您认为其中最好的是什么,为什么或您还有其他可能性?

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

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

的观点:

会期。

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

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

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

提供比位置标题更多的内容,并在目标页面上阅读它们。

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

将这些数据存储在 Cookie 中。

缺乏:

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

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

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

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

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

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

如果您更喜欢 GET 解决方案,请传递一个参数,其中包含要显示的消息的键。

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