实施后重定向获取模式时,如何消除错误的成功消息?

时间:2019-06-04 02:00:18

标签: http post

在Web应用程序中实现重定向后获取模式时,服务器代码的最后一步通常看起来像这样(伪代码):

if (postSuccessful) 
{
    redirect("/some-page?success=true")
}

也就是说,重定向URL在查询字符串中具有某种成功参数,以便您知道何时显示漂亮的“您的表单已提交!”。您页面上的消息。问题在于success=true仅在初始化页面时才保留在查询字符串中。如果用户刷新页面或将页面添加为书签,即使没有进行任何其他POST,他们也会收到错误的成功消息。

是否有一个优雅的解决方案,该解决方案不涉及使用JavaScript从查询字符串和浏览器历史记录中消除success=true?此解决方案有效,但肯定会增加页面的加载过程的复杂性。

1 个答案:

答案 0 :(得分:0)

您可以使用服务器端技术来实现此功能,而无需任何JavaScript。 Stes列在下面:

  1. 发布成功后,使用当前时间戳信息重定向到/some-page

    if (postSuccessful) 
    {
        redirect("/some-page?success=true&timestamp=1559859090747")
    }
    
  2. 当服务器收到GET /some-page?success=true&timestamp=1559859090747请求时,将timestamp参数与当前时间戳进行比较,检查是否在最近3秒钟之内(或者您可以根据网络环境更改此数字) )。

  3. 如果timestamp参数在最近3秒钟内,则表明此GET /some-page?success=true请求是服务器重定向的结果。如果不是,则更像是“用户刷新页面或为其添加书签”的结果。

  4. 在处理GET /some-page的服务器代码中,根据步骤3的结果呈现不同的HTML。仅当当前访问是服务器重定向的结果时,才显示成功消息。