防止浏览器中的后退按钮单击

时间:2011-07-28 10:24:06

标签: java web-applications browser

我理解这个问题是一遍又一遍地问,但我想要一种方法来处理服务器端的后退按钮点击(如银行应用程序)。

当用户点击后退按钮时,该页面应该无效,并且应该要求用户重新开始。

你能指导我一些关于这方面的教程吗?

5 个答案:

答案 0 :(得分:1)

我看到这个解决的最简单的方法如下。

每个页面都配有唯一的ID /令牌。 提交任何表单时始终提交该唯一ID,并在服务器上将其作为“已使用”进行跟踪。

如果用户点击“返回”并重新提交相同的表单,服务器会检查唯一ID ...通知它是重复的,然后忽略提交。

请注意,这不会实际阻止用户“退回”,但如果最后一次操作是“转移$ 1,000,000美元!” - 用户不会意外传输200万。

答案 1 :(得分:0)

  • 制作网页not cachable
  • 跟踪用户路由服务器端,如果她正在访问她不应该重新访问的访问页面,则可以在会话数据中。
  • 检查她是否正在请求访问的资源,然后相应地处理
  • 过滤器是最佳选择

答案 2 :(得分:0)

指示页面不使用缓存。 添加到页面的head元素

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">

答案 3 :(得分:0)

这里有两个问题需要解决。

首先是浏览器通常如何处理后退按钮。您应该使用POST请求来访问后退按钮无法访问的页面。大多数浏览器都会为GET请求使用本地缓存,所以如果你进行GET,根本就不会访问你的服务器。但是,POST请求通常会执行新请求。许多浏览器也会警告用户,并显示一个对话框,说“你确定要再次发送表单吗?”。因此,通过使用POST,您可以增加该页面的每个页面加载对服务器执行新请求的可能性。

您也可以使用GET请求,其中您的服务器返回HTTP标头,使浏览器无法从缓存加载页面。试验一下。

第二个问题是确保使服务器端的重复请求无效。我能想到的第一个解决方案是生成一个使用表单提交的令牌,并在每个请求中存储在数据库中。如果使用已存储的令牌执行请求,则可以使请求无效。也许有更好的技巧,但我会把它作为读者的练习;)

答案 4 :(得分:0)

我也搜索了这个,毕竟我发现了一个小技巧,我认为它可能适合你。

  • 每个页面都有一个调用服务器的javaScript函数 ajax检查此页面是否可用。
  • 在服务器端,您可以保留可用性(使用会话)。
  • 如果没有按照您的意愿重定向页面。