【问题标题】:show "webpage has expired" on back button在返回按钮上显示“网页已过期”
【发布时间】:2009-10-16 19:52:37
【问题描述】:

当用户点击返回按钮时,浏览器显示无处不在的“此页面已过期”消息的要求是什么?

有哪些用户友好的方法可以防止用户在 web 应用中使用后退按钮?

【问题讨论】:

  • 更好的方式是设计您的应用程序,使后退按钮具有合理的含义。当我“不允许”使用后退按钮时,我觉得很生气。
  • 彼得,我同意。有时(例如电子商务网站的结帐过程)您可能会想阻止用户返回。但是,我在回答中建议了针对该问题的更好的服务器端解决方案。
  • @Peter,我完全同意,但我正在处理工作流,所以后退按钮在这里不适用。

标签: http-post


【解决方案1】:

好吧,默认情况下,每当您处理表单 POST,然后用户回击然后刷新,他们就会看到指示浏览器正在重新提交数据的消息。但是如果页面设置为立即过期,那么他们甚至不必点击刷新,他们会在他们回击时看到页面已过期消息。

为了避免这两种消息,有几件事可以尝试:

1) 改用 GET 表单。这取决于您在做什么,但这并不总是一个好的解决方案,因为 GET 请求仍然存在大小限制。并且信息在查询字符串中传递,这不是最安全的选项。

-- 或--

2) 在表单 POST 之后执行服务器端重定向到不同的页面。

这里似乎回答了类似的问题:

Redirect with a 303 after POST to avoid "Webpage has expired": Will it work if there are more bytes than a GET request can handle?

作为第三种选择,可以完全阻止用户返回浏览器。唯一一次我觉得有必要这样做是为了防止他们做一些愚蠢的事情,比如支付两次费用。尽管有更好的服务器端方法来处理它。如果您的网站使用会话,那么您可以通过首先禁用结帐页面上的缓存并将其设置为立即过期来防止他们支付两次费用。然后,您可以利用存储在会话中的某种标志,如果您返回它,它实际上会改变页面的行为。

【讨论】:

    【解决方案2】:

    您需要在 HTTP 标头中设置 pragma-cache 控制选项: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9

    但是,从可用性的角度来看,这是不鼓励处理此事的方法。我强烈建议您寻找其他选择。

    ps:正如 Steve 所建议的,通过 GET 重定向是正确的方法(或使用 JS 检查页面移动)。

    【讨论】:

      【解决方案3】:

      尝试在 Page_Load 中使用以下代码

      Response.Cache.SetCacheability(HttpCacheability.Private)
      

      【讨论】:

      • 此解决方案完美适用于 asp.net 网络表单。
      【解决方案4】:

      session_start之前使用以下之一:

      session_cache_expire(60); // in minutes 
      
      ini_set('session.cache_limiter', 'private');
      

      /注意:

      语言是 PHP

      【讨论】:

      • 包括什么语言会有帮助
      【解决方案5】:

      我不确定这是否是标准做法,但我通常通过不仅为 IE 发送 Vary 标头来解决此问题。在 Apache 中,您可以在 httpd.conf 中添加以下内容:

      BrowserMatch MSIE force-no-vary
      

      根据RFC

      Vary 字段值表示集合 的请求头字段,完全 确定,而响应是 新鲜的,是否允许缓存 使用响应来回复 随后的请求没有 重新验证。

      实际效果是,当您“返回”到 POST 时,IE 只是从历史缓存中获取页面。根本没有请求到达服务器端。我可以在 HTTPWatch 中清楚地看到这一点。

      我很想听听这种方法的潜在不良副作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-04
        • 2020-11-08
        • 1970-01-01
        • 2013-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多