在web应用程序中实现post-redirect-get模式时,服务器代码中的最后一步通常如下所示(伪代码):
if (postSuccessful)
{
redirect("/some-page?success=true")
}也就是说,重定向URL在查询字符串中具有某种success参数,这样您就可以知道何时显示一条漂亮的"Your form has submitted!“您的页面上的消息。这样做的问题是,当只需要初始化页面时,success=true会保存在查询字符串中。如果用户刷新页面或将其加入书签,即使没有其他帖子发生,他们也会收到一条错误的成功消息。
有没有一个很好的解决方案,不需要使用JavaScript从查询字符串和浏览器历史记录中删除success=true?这种解决方案是可行的,但肯定会增加页面加载过程的复杂性。
发布于 2019-06-07 06:18:53
您可以使用服务器端技术来实现此功能,而无需任何JavaScript。stes列表如下:
/some-page:如果服务端收到redirect("/some-page?success=true×tamp=1559859090747")请求时(postSuccessful) {redirect(“/some-page?success=true×tamp=1559859090747”)}
GET /some-page?success=true×tamp=1559859090747,则将timestamp参数与当前时间戳进行比较,确认是否在最近3秒内(也可以根据网络environment).
timestamp参数在最近3秒内,则说明此GET /some-page?success=true请求是服务端重定向的结果。
GET /some-page的服务器代码中,根据步骤3的结果呈现不同的HTML。仅当当前访问是服务器重定向的结果时,才显示成功消息。https://stackoverflow.com/questions/56436465
复制相似问题