在ASP.NET和C#中禁用Fire Fox中的缓存
本文关键字:Fire Fox 缓存 NET ASP | 更新日期: 2023-09-27 17:58:42
我开发了一个处理信用卡付款的web应用程序,当用户在收到付款确认页面后点击Fire Fox中的后退按钮时,它会发布重复付款。
我已经把以下代码放在付款单和确认页面上,它仍然发布重复付款:
Response.Cache.SetExpires(DateTime.UtcNow.AddYears(-1));
Response.Cache.SetValidUntilExpires(false);
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
Response.Cache.SetAllowResponseInBrowserHistory(false);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
我做错了什么?我该如何解决?
重新运行在注释中有一个很好的观点。关于这个问题,试试这个代码(来源):
Response.ClearHeaders();
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1
Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1
它应该强制所有浏览器获取页面的最新版本,而不是缓存版本。(可能要更改Expires
数据,因为该post来自2006
)。
关于不执行重复处理的更常见问题,请阅读页面"不允许重新提交"中给出的建议。
总之,有几种方法可以阻止客户端的浏览器重复请求,但最终,如果提交的内容绝对不能被处理两次,那么你需要在服务器端检查付款是否已经被处理。在他们提交的表单中添加一个唯一的标识符,并将其记录在数据库中,如果您第二次看到相同的标识符,则不处理请求。