【发布时间】:2014-11-27 11:54:40
【问题描述】:
在开发购物车应用程序时, 假设用户点击支付按钮,请求到达服务器,但由于网络连接速度慢,页面没有刷新。现在如果用户觉得点击没有反应,第二次点击按钮,如何避免重复支付?
【问题讨论】:
-
您可以检查订单是否已经处理,如果已经处理则不处理...第二次提交应在数据库级别检查是否已处理,如果已经处理什么都不做……
在开发购物车应用程序时, 假设用户点击支付按钮,请求到达服务器,但由于网络连接速度慢,页面没有刷新。现在如果用户觉得点击没有反应,第二次点击按钮,如何避免重复支付?
【问题讨论】:
简单的解决方案:禁用控件。 更好的解决方案:添加到表单隐藏的 uuid 操作字段,并检查服务器端之前是否未处理操作。
【讨论】:
您可以在会话对象中设置一个属性,每当您收到任何付款请求时,首先检查该会话的属性是否存在。如果是,则丢弃新的付款请求。
付款后,从会话中删除该属性。
HttpSession session = request.getSession();
if(session.getAttribute("Payment") == null){
session.setAttribute("Payment");
//Process your payment here
session.removeAttribute("Payment");
}else{
//Alert User that his payment is already in Process
//OR
//Do NOTHING
}
【讨论】: