当用户点击后退按钮时,浏览器要求显示无处不在的“此页面已过期”消息的要求是什么?
有哪些用户友好的方法可以阻止用户在webapp中使用后退按钮?
当用户点击后退按钮时,浏览器要求显示无处不在的“此页面已过期”消息的要求是什么?
有哪些用户友好的方法可以阻止用户在webapp中使用后退按钮?
好吧,默认情况下,无论何时处理表单POST,然后用户点击然后刷新,他们都会看到表明浏览器正在重新提交数据的消息。但是如果页面设置为立即过期,那么他们甚至不必点击刷新,当他们回击时他们会看到该页面已过期消息。
要避免这两个消息,有几件事要尝试:
1)使用表格GET代替。这取决于你正在做什么,但这并不总是一个好的解决方案,因为GET请求仍有大小限制。并且信息在查询字符串中传递,这不是最安全的选项。
- 要么 -
2)在表单POST后执行服务器端重定向到不同的页面。
看起来类似的问题在这里得到了回答:
在POST之后使用303重定向以避免“网页已过期”:如果有多于GET请求可以处理的字节,它是否会起作用?
作为第三种选择,可以防止用户回到他们的浏览器中。我唯一觉得有必要这样做是为了防止他们做一些愚蠢的事情,比如付两次钱。虽然有更好的服务器端方法来处理它。如果您的站点使用会话,那么您可以通过首先在结帐页面上禁用缓存并立即将其设置为过期来阻止他们支付两次。然后你可以利用存储在会话中的某种标志,如果你回到它会实际改变页面的行为。
您需要在HTTP标头中设置pragma-cache控制选项: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
但是,从可用性的角度来看,这是对此事的劝阻。我强烈建议您寻找其他选择。
ps:正如史蒂夫提出的那样,通过GET重定向是正确的方法(或用JS检查页面移动)。
尝试在Page_Load中使用以下代码
Response.Cache.SetCacheability(HttpCacheability.Private)
之前使用以下之一 session_start
:
session_cache_expire(60); // in minutes
ini_set('session.cache_limiter', 'private');
/注意:
语言是PHP
我不确定这是否是标准做法,但我通常不通过仅为IE发送Vary标头来解决此问题。在Apache中,您可以将以下内容放在httpd.conf中:
BrowserMatch MSIE force-no-vary
根据 RFC:
Vary字段值表示该集合 完全的请求标头字段 确定,而响应是 新鲜的,是否允许缓存 使用响应来回复 后续请求没有 重新验证。
实际效果是当你“回”到POST时,IE只是从历史缓存中获取页面。完全没有请求到服务器端。我可以在HTTPWatch中清楚地看到这一点。
我很想知道这种方法的潜在不良副作用。