如何在POST + HTTP重定向后向用户显示消息

Mac*_*ski 21 error-handling session user-interface redirect post-redirect-get

我正在使用PRG模式来避免多个表单提交.然而,它有一个严重的缺点 - 你不能简单地echo向用户发出确认消息(显然,用户不会看到该页面,他将被重定向到另一个页面).

这个问题的解决方案是什么?我知道其中两个,但它们似乎都不完美.

  • 使用自定义重定向网址,例如:http://example.com/?msg=data-saved.它是无国籍的,所以我认为它非常可靠.但是当用户复制链接,书签等时会产生问题.
  • 存储会话变量/ cookie,并在每次加载页面时检查它.如果已设置,请将其清除并显示消息.看起来不错,但我不确定这个 - 它非常依赖于cookie,它有点复杂.

或许还有其他方法我不知道?会话和URL参数的某些组合?不知道.

你认为最好的方法是什么?哪一个缺点最少?优缺点都有什么?

Jef*_*nal 9

还有其他几个堆栈溢出问题涉及到这一点,但我认为没有任何问题如此清楚地总结.以下是一些:

大多数方便的解决方案都是基于会话的,或者有更严重的缺点(例如在查询字符串中嵌入消息).

如果您不能保证会有会话,则另一种(相当昂贵的)方法是根据表单提交的结果重定向到不同的视图.例如,您可能会重定向到EditWidgetView,EditWidgetSaveSuccessfulViewEditWidgetSaveErrorView(或者您可能只是不重定向错误).在某些语言和框架中,这使得您放弃显示确认/错误消息是不切实际的,但在其他语言和框架中,这可能是值得的.


小智 6

如果您因任何原因不想依赖会话,可以使用Get变量/自定义URL,如果该变量存在,请检查refer.如果引用正确,则显示消息.是的,这增加了对发送的引用的依赖以显示确认消息,但是否则您依赖于会话(虽然可靠,但对于所有解决方案都不是100%完美.)

老实说,一些通常对这种事情非常好的大型网站只是在网址中贴了"actiondone = true".(我注意到Facebook在某些地方会这样做.)


Eli*_*Eli 1

几乎每个允许用户登录的网站都是依靠 cookie 来实现的。这不是一个完美的解决方案,但它是我们得到的最好的解决方案。

此外,会话处理也是 Web 开发框架通常为您处理的事情之一。