我在做网络开发。
我有一个与信用卡有关的页面,当用户单击“刷新”或“返回”时,交易将再执行一次,这是不需要的。
这包括浏览器左上角的“返回”和“刷新”按钮,“右键单击->刷新/返回”,按“F5”键。这只能在某些 cgi 页面上完成,而不是全部。
这可以使用 Javascript 来完成吗?还是有其他方法?
我在做网络开发。
我有一个与信用卡有关的页面,当用户单击“刷新”或“返回”时,交易将再执行一次,这是不需要的。
这包括浏览器左上角的“返回”和“刷新”按钮,“右键单击->刷新/返回”,按“F5”键。这只能在某些 cgi 页面上完成,而不是全部。
这可以使用 Javascript 来完成吗?还是有其他方法?
该标准的方法是做它在3个步骤。
这打破了基本的浏览器用户体验模型......用户应该始终能够在他们的浏览器中使用刷新和返回按钮。建议您以其他方式修复页面。
如果您更新问题以包含您正在使用的服务器语言/平台/技术,那么有人可能会提出解决方案。
重新提交表单会产生重复交易这一简单事实令人担忧。您应该进行某种检查以确保每次提交的表单数据都是唯一的。
例如,提交表单的页面应该被赋予一个与表单一起提交的唯一 ID。然后业务逻辑应该能够识别提交的表单已经被处理(因为(不再)唯一 ID 将是相同的),因此忽略第二次尝试。
“标准方式”仍然不会阻止客户两次单击后退按钮……或者如果他们认为(无论出于何种原因)没有处理过表单,甚至会返回并重新提交表单。
生成一个随机字符串并将其存储在会话中,
然后将其作为隐藏值输出到您的表单,
检查提交和存储变量,如果匹配处理您的请求,
去 1。
将此代码放在表单页面上
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.Now-new TimeSpan(1,0,0));
Response.Cache.SetLastModified(DateTime.Now);
Response.Cache.SetAllowResponseInBrowserHistory(false);