考虑这种情况:
>我访问了使用ASP.NET构建的网站页面。该页面是一个包含ASP.NET服务器控件的简单aspx页面。
>我点击了一个链接,将我带到同一网站上的其他页面。
>我点击浏览器的BACK按钮。
解决方法
我认为最好的答案是:这取决于浏览器,特别是在post / postback之后。
较老的浏览器用于弹出一个确认对话框,使“页面包含将被重新提交的POST数据”,您可以继续(重新提交)或取消。因为在ASP.NET WebForms中发生的一切都是FORM元素(ViewState,事件等)的一部分,这将导致整个生命周期被重复。
当然,这不会造成重复提交的麻烦,所以很多网站不得不提出解决方法来解决dupe问题,而今天大多数浏览器只是从缓存中提取页面。
…这是除非你重写缓存控制头,强制浏览器不要将页面存储在缓存中。显然,在这种情况下,它无法从缓存中检索,所以通常会被重新提交。但是,这又取决于浏览器 – 例如,某些浏览器不允许通过SSL重新提交,所以如果这是使用的协议,那么用户只会看到一条消息,指出该页面已过期/不能所示。
来想一想,可能一个更好的答案是:作为网站设计师,当您点击“后退”按钮时,您真的不能依赖用户浏览器的任何特定行为。如果重复提交可能会产生负面的副作用(如收取信用卡两次),那么您需要采取适当措施来防止这种情况发生。这是很好的做法,因为完全有可能用户只需双击“提交”按钮意外。