在PHP中检测单击后退按钮后的页面重新加载

在PHP中检测单击后退按钮后的页面重新加载,php,jquery,browser,back-button,Php,Jquery,Browser,Back Button,我正在寻找一种方法来检测单击“后退”按钮后页面何时被重新加载,这样我就可以有选择地忽略错误。让我解释一下原因: 想象一下,一个页面显示一些由id标识的数据: /show/some/data?id=5 最初,id存在并显示页面。如果该id不存在,将显示一条错误消息并记录一个错误,因为这不应该发生,并且将指示应用程序中的链接已断开 现在假设用户查看数据,决定将其删除,删除后,使用后退按钮再次转到同一页面(顺便说一句,这不是假设,我在应用程序中看到过)。现在,id不再有效,从而触发错误。如果我能在使

我正在寻找一种方法来检测单击“后退”按钮后页面何时被重新加载,这样我就可以有选择地忽略错误。让我解释一下原因:

想象一下,一个页面显示一些由id标识的数据:

/show/some/data?id=5
最初,id存在并显示页面。如果该id不存在,将显示一条错误消息并记录一个错误,因为这不应该发生,并且将指示应用程序中的链接已断开

现在假设用户查看数据,决定将其删除,删除后,使用后退按钮再次转到同一页面(顺便说一句,这不是假设,我在应用程序中看到过)。现在,id不再有效,从而触发错误。如果我能在使用后退按钮后区分初始页面加载和第二次页面加载,我的错误处理可能会更为宽松。我的理由是,应用程序中断开的(前向)链接是一个致命错误。单击“上一步”后出现的断开链接(最初没有)很可能是由用户在此期间采取的某些操作造成的。在这种情况下,我宁愿将用户重定向到概览页面,也不愿显示应用程序错误

我认为解决这个问题的一种方法是将一些随机生成的id附加到url:

/show/some/data?id=5&rnd=<?php print rand(); ?>

这样做的侵入性稍小,但对于解决这样一个看似琐碎的问题来说,仍然相当严厉。我想知道是否有或可能有一种独立的方法来做到这一点。后端应用程序是否有办法区分是通过向前单击链接加载页面,还是在单击后退后重新加载页面?还是有更优雅的javascript解决方案?

没有完美的解决方案,因为您试图(某种程度上)改变浏览器的行为。我能想到的最简单的想法是使用已删除页面的列表设置会话变量,并在删除页面上将页面ID推入其中

然后,您需要更新错误处理程序,以便在“已删除页面”列表中额外检查请求的页面ID是否存在。这样,你就不必乱弄网址了

下面是一个流程示例:

  • 用户请求页面id 1
  • 应用程序检查数据库,它不存在
  • 应用程序检查会话,它不在已删除页面列表中
  • 显示错误消息,服务器上记录了错误
  • 用户请求页面id 2
  • 应用程序检查数据库,它存在,向用户显示页面
  • 用户单击删除按钮
  • 页面ID将添加到已删除页面的会话列表中,并且该页面将被删除
  • 用户返回(或手动键入url,这是一项额外功能)
  • 应用程序检查数据库,id 2不存在
  • 应用程序检查会话,id 2在已删除页面列表中
  • 显示错误消息,未记录任何错误
您还可以更进一步,跟踪所有访问的页面,这样您就知道,如果几分钟前有某个内容,而现在没有,那么用户一定已经删除了它。这将允许您在需要时处理更多此类事件

$("a").attr('href', function (i, h) {
    return h + (h.indexOf('?') != -1 ? "&" : "?") + "rnd=" + Math.random ();
});