15

我有一个 ASP.Net 页面,其中包含一个按钮。此页面包含一个 ServerSide Paypal 按钮。

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

这一切都很好。

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

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

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

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

4

8 回答 8

19
window.location.replace(URL);

窗口位置

替换(网址)

将当前文档替换为提供的 URL 中的文档。与 assign() 方法的不同之处在于,在使用 replace() 之后,当前页面将不会保存在会话历史记录中,这意味着用户将无法使用后退按钮导航到该页面。

于 2008-11-14T13:42:01.710 回答
6

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

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

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

于 2008-11-14T13:38:42.980 回答
5

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

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

于 2008-11-14T13:38:29.720 回答
2

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

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

于 2008-11-14T13:40:32.180 回答
2

我不确定您是否可以通过 PayPal 集成轻松做到这一点,但 “发布/重定向/获取” 模式可用于解决此问题

于 2008-11-14T14:09:59.483 回答
1

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

window.history.go(-2);

特别是在出现负载故障警告弹出窗口时。

于 2013-03-29T09:54:31.867 回答
0

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

于 2017-01-13T18:07:48.667 回答
0
protected void Page_Load(object sender, EventArgs e)

    {

        Page.RegisterClientScriptBlock("", "<script>if(history.length>0)history.go(+1);</script>");

    }
于 2020-04-30T17:32:36.113 回答