【问题标题】:What happens when I press browser BACK button?当我按下浏览器的返回按钮时会发生什么?
【发布时间】:2010-06-18 18:27:31
【问题描述】:

考虑场景:

  1. 我访问了一个使用 ASP.NET 构建的网站的页面。该页面是一个简单的 aspx 页面,其中包含 ASP.NET 服务器控件。

  2. 我点击了一个链接,该链接将我带到同一网站上的其他页面。

  3. 我点击了浏览器的BACK按钮。

问题:在页面生命周期方面会发生什么?是所有事件都发生了,还是浏览器只显示页面的缓存版本而不发出任何请求?

【问题讨论】:

    标签: asp.net page-lifecycle


    【解决方案1】:

    我认为最好的答案是:这取决于浏览器,尤其是在 post/postback 之后。

    以前的浏览器会弹出一个确认对话框,大意是“该页面包含将重新提交的 POST 数据”,您可以继续(重新提交)或取消。由于 ASP.NET WebForms 中发生的一切都是FORM 元素(ViewState、事件等)的一部分,因此这将导致整个生命周期重复。

    当然,这给重复提交带来了无穷无尽的麻烦,因此许多网站不得不想出解决重复问题的方法,而今天大多数浏览器只是从缓存中获取页面。

    ...那是除非您覆盖缓存控制标头并强制浏览器不将页面存储在缓存中。显然,在这种情况下,它无法从缓存中检索,因此通常最终会被重新提交。但是,同样,这取决于浏览器 - 例如,某些浏览器不允许通过 SSL 重新提交,所以如果这是正在使用的协议,那么用户只会看到一条消息,说明该页面已过期/不能显示。

    想一想,可能更好的答案是:作为网站设计者,当单击“后退”按钮时,您真的不能依赖用户浏览器的任何特定行为。如果重复提交可能会产生负面影响(例如两次向信用卡收取费用),那么您需要采取足够的措施来防止这种情况发生。无论如何,这是一种很好的做法,因为用户完全有可能不小心双击“提交”按钮。

    【讨论】:

    • 我同意 Aaronaught 的回答。我不会尝试编写任何假定“后退”按钮在所有浏览器中都会以某种方式运行的代码。
    • 我认为您考虑了另一种情况,即使用控件后支持同一页面,然后按 BACK 按钮......我说的对吗?
    • @Manish:重要的不一定是用户的当前页面是否有POST数据,而是上一个页面是否有(返回按钮会将他们带到的那个)有POST 数据。这包括两种情况 - 从回发返回,以及在前一页有回发时从新页面返回(或只是 POST)。
    【解决方案2】:

    我们甚至尝试过

    Response.ExpiresAbsolute = DateTime.Parse("1/1/1980");
    Response.AddHeader("cache-control", "no-store, must-revalidate, private");
    Response.AddHeader("Pragma", "no-cache");
    

    解决此类问题

    【讨论】:

      【解决方案3】:

      页面将从缓存中显示。

      【讨论】:

      • 因此,如果我设置了 Response.Cache.SetCacheability(HttpCacheability.NoCache),点击 Back 会导致浏览器对前一个页面发出 Get 请求,或者如果那是最后一个页面,甚至可能是回发用户的操作?
      • 是的,如果您设置了 Response.Cache.SetCacheability(NoCache),它会回发,但对于某些页面,您会看到相同的内容。尝试使用 Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetExpires(DateTime.Now-new TimeSpan(1,0,0)); Response.Cache.SetLastModified(DateTime.Now); Response.Cache.SetAllowResponseInBrowserHistory(false);
      • 我认为您会收到“页面已过期”通知而不是页面,但我认为这仍然取决于浏览器。
      【解决方案4】:

      通常所有事件都应该发生,但如果你有一个超级浏览器,那么它可能会碰巧显示一个缓存页面 你可以在你的页面加载中设置一个断点,看看它是否会发生

      【讨论】:

        猜你喜欢
        • 2021-12-18
        • 1970-01-01
        • 2014-11-26
        • 2020-05-07
        • 1970-01-01
        • 2016-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多