【问题标题】:How do I remove a page from the browser history?如何从浏览器历史记录中删除页面?
【发布时间】:2010-09-22 08:21:28
【问题描述】:

我有一个 ASP.Net 页面,其中包含一个按钮。此页面包含一个服务器端 Paypal 按钮。

当被推送时,我的服务器在后端做了各种聪明的事情,然后将响应重写为一个表单和一些将这个表单发布到 paypal 的 javascript..

这一切都很好。

但是,如果用户随后选择单击返回,他们将到达我生成的自我投递表单,然后将其再次转发到 Paypal。

我想如果我能找到一种方法让我生成的表单页面不存在于历史记录中,那么这将解决我的问题。但我不知道如何纠正这个问题。

如何从历史记录中删除我的页面或让它永远不会出现?

更新:感谢所有人...这些是一些很好的答案。赞成所有好的,但由于巧妙地使用隐藏字段而不是 cookie 作为决策依据而选择了 splattne。

【问题讨论】:

标签: asp.net browser-history


【解决方案1】:

作为网络应用程序,您永远无法完全控制用户的浏览器。即使有一种方法可以指示浏览器不要将页面存储在历史记录中,我对此表示怀疑,您也不能确定它会起作用。例如,聪明的用户可以调整开源浏览器以存储历史中的每一页,无论如何。

我认为你应该尝试从另一个角度来解决这个问题。例如,您可以检测到它与正在转发的表单相同,而不是第二次将其发送到贝宝。重要的是在服务器端进行。

【讨论】:

  • 当用户从 paypal 页面返回时,浏览器会从缓存中检索 Generated 表单并适当地再次自我发布。没有与服务器的进一步联系。所以我不知道如何使用服务器来防止这种情况发生。
  • 您是否建议我可以让自动生成的表单具有一些条件逻辑,可以发布或执行另一个 back().. 它可以基于什么逻辑?
  • 我能说什么...... splattne 在我问这个问题的几秒钟内回答了这个问题:)
  • @dub 这个想法不是为了控制用户的浏览器,而是向浏览器传递正确的意图。 window.location.replace 表达了这一意图。做黑客不会,我相信其他人不应该为了结果而去黑客攻击,除非没有标准的方式来表达他们对浏览器的期望。如果用户根据自己的意愿破坏了他们的 Web 客户端,那么他们可以选择让他们的客户端返回不应该返回的页面,只要您不依赖客户端的安全性就可以了。
【解决方案2】:

我不确定这是否可以做到。但这里有一个想法,您可以如何防止重新提交表单。

您可以在您的表单中插入一个隐藏输入,它的开头是空的。提交时,您将在该字段中写入一个值,并确保在该字段为空时检查每次提交尝试。

如果提交时它不为空,则表明该表单之前已发送,您可以警告用户。

【讨论】:

  • 太棒了...实际上我想如果我发现这个值已经被填充了,那么我将执行另一个返回:)
【解决方案3】:

也许您可以在提交表单之前设置一个 cookie。

页面加载后,检查该 cookie 是否存在(意味着表单已经提交)。如果找到,不再自动提交表单,而是再次自动返回 (window.history.back())。

【讨论】:

    【解决方案4】:
    window.location.replace(URL);
    

    window.location:

    替换(网址)

    将当前文档替换为 一个在提供的 URL。这 与 assign() 方法的区别是 使用 replace() 后,当前 页面不会保存在会话中 历史,这意味着用户不会 能够使用返回按钮 导航到它。

    【讨论】:

    • 我认为这不会起作用,因为我需要发布当前页面才能将所需的数据传输到贝宝。因此我有一些 js -> "document.getElementById('form1').submit();"我无法用您的“替换”建议替换它
    • 这可能不符合 OP 的要求,但它确实帮助我解决了另一个问题。谢谢!
    【解决方案5】:

    我不确定您是否可以通过 PayPal 集成轻松做到这一点,但是 "Post / Redirect / Get" 模式可以用来解决这个问题

    【讨论】:

      【解决方案6】:

      对某些人来说有用的提示可能是这个......

      window.history.go(-2);
      

      尤其是在出现负载故障警告弹出窗口时。

      【讨论】:

        【解决方案7】:

        如果 window.referer 是您试图避免再次调用的 Paypal 页面,您可以简单地对页面进行编程,使其不提交,或做某事/导航到其他地方。

        【讨论】:

          【解决方案8】:
          protected void Page_Load(object sender, EventArgs e)
          
              {
          
                  Page.RegisterClientScriptBlock("", "<script>if(history.length>0)history.go(+1);</script>");
          
              }
          

          【讨论】:

          • 你需要解释你的解决方案。
          猜你喜欢
          • 2017-11-02
          • 1970-01-01
          • 2011-02-03
          • 2017-07-01
          • 1970-01-01
          • 2012-04-20
          • 1970-01-01
          • 2010-10-20
          • 1970-01-01
          相关资源
          最近更新 更多