【发布时间】:2015-03-08 13:56:36
【问题描述】:
我需要防止为我客户的网站提交重复的表单。
- 我们需要一些来自用户的表单数据用于订单确认页面。
- 我们对 Web 服务器使用负载平衡。
方法一:发布/重定向/获取
(PRG 模式:http://en.wikipedia.org/wiki/Post/Redirect/Get)
一开始我尝试使用 PRG 模式。
在这种情况下,我认为我需要跨多个 Web 服务器处理会话(或 spring flashmap)。
方法 2:在客户端禁用刷新。
我的一位同事建议采用这种方法。
方法 3:发布/发布
另一位同事建议采用这种方法。
我认为方法 2、3 不是一个好的选择。
但我不知道这些方法的具体缺点或安全风险。
我试图谷歌,但我没有找到答案。
提前谢谢你。
[编辑]
我想更新利弊。
方法一:发布/重定向/获取
优点
- 安全!
缺点
- 如果您需要用户的一些表单数据在确认页面上显示,您需要使用
session,database之类的。 - 如果您使用
session,并且拥有多个服务器,则您必须做一些事情以使会话在多个服务器上可用。
方法 2:在客户端禁用刷新。
优点
缺点
- 如果您限制浏览器标准功能(例如刷新),用户会感到不安。
- 需要考虑F5、Ctrl+F5、⌘+F5等各种刷新图标。
- 在移动设备中,当用户重新加载浏览器时,许多网络浏览器会自动刷新页面。
方法 3:发布/发布
优点
- 您不必担心跨多个服务器的会话共享问题。
缺点
- 第二个表单提交可能会失败。
【问题讨论】:
标签: java security spring-mvc web post-redirect-get