【问题标题】:PHP, Session State, Redirecting "Home" Link Based on ReferrerPHP,会话状态,基于引用者重定向“主页”链接
【发布时间】:2009-12-11 16:11:24
【问题描述】:

通常,网站有一个菜单栏,其中包含指向该网站不同页面的链接——主页、页面 A、页面 B 等。

假设您有一个地址为 http://www.example.com 的网站。 99% 当有人在他们的浏览器中键入该 URL 时,他们会被定向到由“主页”表示的页面。它通常具有 index[.html|.php] 的可选扩展名(例如,http://www.example.com/index.html)。但是,在某些用例中,根据用户要从哪里访问您的网站,您希望将他们重定向到不同的页面。例如,如果您的网站上有广告宣传您的网页,您可能希望将它们重定向到:http://www.example.com/camefromad.html,这看起来与您的正常“主页”页面几乎相同,但也许并添加了一点文字,说明它们来自广告所在的页面。

我的问题是:

有没有办法,在用户从被推荐的页面登陆网站后,使用 PHP 来确保点击“主页”链接将始终转到 http://www.example.com/camefromad.html IF 用户从那里登陆?我要避免的是用户来到 http://www.example.com/camefromad.html 然后单击菜单栏中的“主页”并最终进入默认主页永远无法返回http://www.example.com/camefromad.html 页面(我没有在公共菜单中启用该登录页面,因为我不希望普通用户能够去那里)。

这是我第一次使用 PHP,我正在尝试使用会话状态等将它拼凑起来,但我还没有完全完成这个难题。这是我在 index.php 中的内容(这是代表“主页”链接的文件:

<?
session_start(); 
$_SESSION['amSet']= 0;
?>

<?
if ($_SESSION['amSet'] == 0) {
  if (!empty($_SERVER['HTTP_REFERER'])) {
    $referrer = $_SERVER['HTTP_REFERER'];
    $_SESSION['amSet'] = 1;
  }
}
if (preg_match("/other.example.net/",$referrer)) {
   header('Location: http://example.com/camefromad.html');
}
?>

基本上,我的想法是在用户访问该站点时设置一个变量,以便将引用者变量设置为该引用站点。但是,如果用户点击网站本身的链接,我不希望引用者重置。我希望它保持用户第一次访问该站点时的状态,因此如果用户单击“主页”链接,它将始终将用户引至适当的页面。显然,我上面的代码不起作用。

【问题讨论】:

  • 一般来说,您使用引荐来源网址的方法是正确的,但您应该记住,这可能并非每次都有效,因为某些用户可能已禁用发送引荐来源网址(或发送虚假引荐来源网址)。

标签: php session state referrer


【解决方案1】:

你快到了! -- 只需将 $referrer 保存在 $_SESSION 变量中。然后您可以检查是否在后续页面请求中设置了 $_SESSION['referrer'] 并采取相应措施。

【讨论】:

  • 谢谢珍妮克。我才意识到我最初的问题是什么。我收到此“无法修改标头信息”错误。这是因为我在第一个 ?> 和第二个
【解决方案2】:

为什么不将引用者存储在会话变量中? 在您的目标网页中,您可以使用:

<?php
session_start();
if(empty($_SESSION['comeFrom']) && !empty($_SERVER['HTTP_REFERER'])){
    $_SESSION['comeFrom'] = $_SERVER['HTTP_REFERER'];
}
?>

然后,在您的主页中:

<?php
session_start(); 
if(!empty($_SESSION['comeFrom']) &&
   preg_match("/referrerSite.com/",$_SESSION['comeFrom'])){
   header('Location: http://www.example.com/camefromad.html');
}
?>

【讨论】:

  • 优秀的方舟。谢谢!在修复了我在上面的评论中提到的空白问题后,我应用了这段代码,它看起来比我最初走的路线要干净得多,而且事情似乎运行良好。
猜你喜欢
  • 2023-03-13
  • 2010-11-09
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多