【问题标题】:How do you prevent a user from cancelling a page redirect?如何防止用户取消页面重定向?
【发布时间】:2021-03-15 13:46:49
【问题描述】:

我有一行代码:

location.href = 'payments/basic.php';

它工作正常,但用户只需按 Esc 键即可取消操作。我尝试使用事件侦听器来防止按下 Esc 键,但它仅在用户位于初始页面时才有效。一旦他们被重定向,它就会停止工作,他们可以快速按 Esc 键或浏览器地址栏旁边的大 X 来取消重定向。

有没有办法完全防止这种情况发生?

编辑: 我想这样做的原因是登录后,它们会自动发送到索引页面。我的数据库中有一个标志,用于检查用户是否已付款。然后在索引页面上,我有一个小脚本查询数据库以检查标志是真还是假。如果它是假的,他们会立即被通知他们正在被重定向以进行付款。如果在此重定向点,他们取消,他们将能够在不付款的情况下留在索引页面上。

【问题讨论】:

  • 您为什么想要/需要阻止这种情况?是否要导航到您的页面取决于您的用户。这是他们的浏览器、他们的设备、他们的互联网连接。仅仅因为您编写了一些代码来自动化导航并不会剥夺他们选择计算机将要做什么的权利。您想在您的应用程序中解决什么实际问题,您认为这是由用户取消此导航引起的?
  • 你不能,这是一个浏览器级别的事件,和刷新一样,你不能做任何事情。
  • 首先,您为什么要阻止这种情况?我的猜测是,有些东西你不希望他们看到......如果是这样的话,也许可以解决这个问题,而不是试图阻止页面取消
  • If at this point of redirection, they cancel, they will be able to remain on the Index page without payment...然后确保您有一些代码,在他们延迟付款足够长的时间后,确保他们在付款之前无法在您的网站上做任何其他有用的事情。这应该是足够的动力。你试图在这里解决错误的问题。您还可以做一些服务器端的诡计,从服务器端简单地将 basic.php 的内容包含在 index.php 中(而不是常规内容),因此没有机会 not 接受该内容.
  • 撇开原因不说,我认为正确的答案是“加载速度更快!”如果用户有时间按 Esc,则说明您的页面加载速度不够快。

标签: javascript php html redirect


【解决方案1】:

我认为防止 Esc 键停止导航的唯一方法是不要离开原始页面。而不是做

location.href = 'payments/basic.php';

basic.php 发出 XHR 或获取请求,并用结果填充当前文档,而不是加载全新的文档 - 就像 SPA 的工作原理一样。

(您几乎肯定希望对basic.php 进行一些更改 - 例如,让它返回包含数据的易于解析的 JSON,而不是 HTML 文档)

关于编辑

登录后,它们会自动发送到索引页面

如果此时他们取消了重定向,他们将能够在不付款的情况下留在索引页面上。

如果您试图阻止访问原始页面,那么在您检查数据库中的标志之前,不要提供原始页面。在您验证用户的凭据之前,不要一开始就提供索引页面。如果他们没有被授权,将他们在 PHP 中(不是在 JS 中)重定向到支付页面。无需弄乱用户的转义键。

【讨论】:

  • 这很聪明。
  • 可以说用户也可以采取措施阻止 AJAX 请求成功加载,尽管这并不那么容易。
【解决方案2】:

为什么不反过来呢? 默认为支付页面,如果已经支付,则重定向到 index.html。哈哈。

【讨论】:

  • 哦,好吧。所以我可以在登录时做到这一点。这很简单......
  • 这是有道理的,只要它不会效率低下(例如,如果 99% 的用户已经付费,那么您会产生额外的 HTTP 流量,但没有任何效果)。另请注意,使用服务器端 Location 标头而不是 Javascript 会更好地完成此操作,这样在他们支付的情况下,支付页面永远不会显示(即使是片刻)。始终加载 index.php 可能会更好,但在没有付款的情况下更改其内容以显示付款标记。结果相同,但 HTTP 请求更少。
猜你喜欢
  • 1970-01-01
  • 2013-03-12
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
相关资源
最近更新 更多