微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试使用 HTTP REFERER 和 PHP 创建后退按钮,即使在页面自行重新加载后也能正常工作

如何解决尝试使用 HTTP REFERER 和 PHP 创建后退按钮,即使在页面自行重新加载后也能正常工作

我正在尝试将 HTTP_REFERER 保存到 $_SESSION[] 变量,并且仅在引用页面当前页面不匹配时才更新它。这样,如果我通过 PHP 脚本重新加载页面,它不会将我所在的当前页面保存为引用者。

首先,我获取 REFERER 并将其与当前 URL 进行比较:

$referer = $_SERVER["HTTP_REFERER"];
preg_match('/^(.*?\:\/\/)/',$referer,$start);
$url = $start[0].$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

然后我有一个 IF 语句,说明它们是否不匹配以更新会话:

if($url != $referer){
     $_SESSION['referer'] = $_SERVER["HTTP_REFERER"];
}

然后我检查输出

echo $_SESSION['referer'];

问题在于它无论如何都会更新会话!

我尝试用 cookie 而不是会话变量来做同样的事情。使用 cookie,我可以在控制台中看到它的变化。它不会更新,然后一秒钟后它会更新。几乎就像页面加载了两次一样。

当我设置此代码

setcookie('test',$_SERVER["HTTP_REFERER"]);

当我进入一个页面时,它会正确显示正确的引用,然后在一秒钟后切换到当前页面

我当前的设置使用 .htaccess,这样我就不必键入页面文件名。我有任何子文件夹的所有请求都转到 /index.PHP

所以http://example.com/homehttp://example.com/coolpage都会回到http://example.com/index.php

然后使用 PHP 查找与该子文件夹同名的文件,然后将其作为一种简单的模板系统“包含”在我的 index.PHP 文件中。

这些 .htaccess 重定向是否与 $_SERVER["HTTP_REFERER"] 混淆?如果我直接在我的代码中使用 $_SERVER["HTTP_REFERER"] 它工作正常(它没有更新)。只有当我尝试将它保存到另一个变量时,事情才会变得不稳定。

是否有更好的方法让后退按钮将用户发送回他们原来的位置,而无需考虑同一 URI 的多个页面加载?

解决方法

我发现了一个看起来有点奇怪的解决方法,但它达到了我想要的效果。

我将整个事情包装在一个 if 语句中,仅当 $uri != favicon.ico 时才执行

if($uri != 'favicon.ico'){
   $referer = $_SERVER["HTTP_REFERER"];
   preg_match('/^(.*?\:\/\/)/',$referer,$start);
   $url = $start[0].$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

      if($url != $referer){
           $_SESSION['referer'] = $_SERVER["HTTP_REFERER"];
      }

   $backButton = $_SESSION['referer'];  
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。