回答
嗯,默认情况下,当你处理表单POST时,然后用户回来然后刷新,然后他们会看到消息表明浏览器正在重新提交数据。但是,如果页面被设置为立即过期,那么他们甚至不需要进行刷新,并且他们会在返回时看到页面已过期的消息。
为了避免两个消息有几件事情要尝试:
1)使用的一种形式,而不是GET。这取决于你在做什么,但这并不总是一个好的解决方案,因为GET请求仍然有大小限制。信息在查询字符串中传递,这不是最安全的选项。
- 或 -
2)执行服务器端重定向到一个不同的页的形式POST之后。
看起来像一个类似的问题在这里回答:
作为第三种选择一个可以防止用户在他们的浏览器回去的。唯一一次我觉得有必要这样做是为了防止他们做一些愚蠢的事情,比如支付两次。虽然有更好的服务器端方法来处理。如果您的网站使用会话,那么您可以通过首先禁用结帐页面上的缓存并将其设置为立即过期来阻止他们付费两次。然后,您可以利用存储在会话中的某种标志,如果您回头了解,它实际上会改变页面的行为。
你需要在HTTP头设置编译缓存控制选项: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
然而,从可用性的角度来看,这是不鼓励的做法此事。我强烈建议你去寻找其他的选择。
ps:正如Steve提议的那样,通过GET重定向是正确的方式(或者用JS检查页面移动)。
我不确定这是否是标准做法,但我通常不通过仅为IE发送Vary标头来解决此问题。在Apache中,就可以把在httpd.conf以下:
BrowserMatch MSIE force-no-vary
按照RFC:
的因人而异字段值指示充分 确定请求头字段的集合 ,而响应为 新鲜,是否允许高速缓存为 使用响应来回复 后续请求而不使用 重新验证。
实际效果是,当你回到POST时,IE只是从历史缓存中获取页面。根本没有请求去服务器端。我可以在HTTPWatch中清楚地看到这一点。
我会很有兴趣听到这种方法的潜在不良副作用。
使用下列前session_start
之一:
session_cache_expire(60); // in minutes
ini_set('session.cache_limiter', 'private');
/注:
语言是PHP
包括这是什么语言会有帮助 – mkoryak 2012-02-15 16:17:51
- 1. ASP.NET浏览器显示“网页已过期”作为后退按钮(回传后)
- 2. 网页已过期ie7无后退按钮
- 3. 即后退按钮上的“网页已过期”PHP会话问题
- 4. 过期网页上点击浏览器后退按钮
- 5. 后退按钮不显示在UINavigationController上
- 6. 当JSF(Richfaces)按下后退按钮时,网页过期提交
- 7. 后退按钮不显示
- 8. 后退按钮不显示
- 9. 显示按下后退按钮上的插页式广告?
- 10. 通过按下后退按钮在对话框上显示警报框
- 11. 铬后退按钮跳过页
- 12. 显示后退按钮时用户不在主页
- 13. 在注销时显示登录页面(点击后退按钮)
- 14. 离子:如何显示后退按钮
- 15. 后退按钮中显示联系人
- 16. 隐藏/显示后退按钮
- 17. 会显示消息和后退按钮
- 18. 工具栏(后退按钮不显示)
- 19. jQuery Mobile的 - 后退按钮不显示
- 20. 如何停止浏览器后退按钮显示我已离开的页面
- 21. 网页已过期
- 22. 显示按下后退按钮上的提醒对话框
- 23. 后退按钮不显示在导航栏上。 Xamarin
- 24. 后退按钮在屏幕上显示为不同的颜色?
- 25. 导航后退按钮不显示,如何将后退按钮添加到UINavigationItem
- 26. Xamarin表单导航页面显示多个后退按钮
- 27. 当我点击后退按钮时,网页没有显示最后一个网页
- 28. IOS 9.3禁用iPhone上的后退按钮后退按钮
- 29. 离子去除后退按钮和显示菜单按钮
- 30. 的UINavigationController上后退按钮
更好地将设计您的应用程序,以便后退按钮具有明智的意义。当我'不允许'使用后退按钮时,我觉得它很生气。 – Peter 2009-10-16 20:18:58
彼得,我同意。有时您可能会试图阻止用户返回,因此有时(例如电子商务网站的结帐流程)。但是,我的答案中提出了一个更好的服务器端解决方案。 – 2009-10-16 20:36:24
@Peter,我完全同意,但我正在处理工作流程,所以后退按钮不适用于此。 – mkoryak 2009-10-19 02:19:53