【问题标题】:Preventing back button clicks in browser防止在浏览器中单击后退按钮
【发布时间】:2011-10-15 00:09:17
【问题描述】:

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

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

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

【问题讨论】:

  • 您是否正在使用特定的 Web 框架来实现这一目标?
  • 我们使用的是spring security。

标签: java web-applications browser


【解决方案1】:

我见过的最简单的解决方法如下。

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

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

请注意,这不会从物理上阻止用户“返回”,但如果最后一个操作是“转移 1,000,000 美元!” - 用户不会意外传输 200 万。

【讨论】:

  • 忽略提交?我不想忽略任何提交。仅当单击后退按钮时,才会给出错误页面。这种方法会处理这种情况吗?
  • 当然,遇到重复项时该怎么做完全取决于您。您可以重定向到错误页面并提供一条错误消息,表明他们已尝试两次提交相同的信息......或者让他们到达预期的目标页面,但在该页面上放置一条错误消息,清楚地表明第二次提交是未处理。
【解决方案2】:
  • 制作页面not cachable
  • 跟踪用户路由服务器端,如果她正在访问她不应该重新访问的已访问页面,则可能是会话数据。
  • 检查她是否在请求访问的资源,然后进行相应的处理
  • 过滤器是最好的选择

【讨论】:

  • 这是私人的东西,不能在这里分享:)
  • 哦,我想我知道你在说谁了 :) 当出现问题时,她还会重新启动电脑。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

    您也可以使用 GET 请求,您的服务器会返回 HTTP 标头,使浏览器不会从缓存中加载页面。试试这个。

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

    【讨论】:

      【解决方案5】:

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

      • 您的每个页面都有一个 javaScript 函数调用服务器 ajax 来检查该页面当时是否可用。
      • 在服务器端,您保持可用性(通过会话)。
      • 如果不按您的意愿重定向页面。

      【讨论】:

        猜你喜欢
        • 2013-01-11
        • 2011-08-30
        • 2015-10-22
        • 2010-12-19
        • 1970-01-01
        • 2013-08-25
        • 1970-01-01
        • 2017-04-23
        • 2013-08-11
        相关资源
        最近更新 更多