我有一个包含按钮的ASP.Net页面。此页面包含ServerSide Paypal按钮。
推送时,我的服务器在后端执行各种聪明的操作,然后将响应重写为表单和一些javascript,将此表单发布到paypal ..
这一切都很有效。
然而,如果用户然后选择点击返回,他们将到达我生成的自我发布表单,并将其再次转发给Paypal。
我想如果我能找到一种方法让我生成的表单页面不存在于历史记录中,那么这将解决我的问题。但我不知道如何纠正这个问题。
如何从历史记录中删除我的网页,或者只是让它永远不会出现?
更新:感谢所有......这些都是一些很棒的答案。赞成所有好的,但由于巧妙地使用隐藏字段而不是cookie作为决策依据而使用splattne。
答案 0 :(得分:19)
window.location.replace(URL);
替换(URL)
用。替换当前文档 一个在提供的URL。该 与assign()方法的区别在于 使用replace()后的电流 页面将不会保存在会话中 历史,意味着用户不会 能够使用后退按钮 导航到它。
答案 1 :(得分:6)
我不确定是否可以这样做。但是这里有一个想法,你怎么能阻止重新提交表单。
您可以在表单中插入一个隐藏输入,该输入在开头为空。提交时,您将在该字段中写入一个值,并确保在此字段为空时检查每次提交尝试。
如果提交时它不是空的,则您知道该表单之前已发送过,您可以警告用户。
答案 2 :(得分:5)
作为一个Web应用程序,您永远无法完全控制用户的浏览器。即使有一种方法可以指示浏览器不将页面存储在历史记录中,我怀疑,您无法确定它是否可行。例如,一个聪明的用户可以调整一个开源浏览器来存储历史中的每个页面,无论如何。
我认为你应该尝试从另一个角度解决问题。例如,您可以检测到它是转发的相同形式,而不是第二次将其发送到PayPal。重要的是在服务器端进行。
答案 3 :(得分:2)
也许您可以在提交表单之前设置cookie。
加载页面时,检查是否存在该cookie(意味着表单已提交)。如果找到,则会自动返回(window.history.back()
)而不是自动提交表单。
答案 4 :(得分:2)
我不确定您是否可以通过PayPal集成轻松完成此操作,但是 "Post / Redirect / Get"模式可用于解决此问题
答案 5 :(得分:0)
对某些人有用的提示可能就是这个......
window.history.go(-2);
特别是在出现负载故障警告弹出窗口时。
答案 6 :(得分:0)
如果window.referer是您试图避免再次调用的Paypal页面,您可以简单地将您的页面编程为不提交,或者做某事/导航到其他地方。
答案 7 :(得分:0)
protected void Page_Load(object sender, EventArgs e)
{
Page.RegisterClientScriptBlock("", "<script>if(history.length>0)history.go(+1);</script>");
}