代码之家  ›  专栏  ›  技术社区  ›  Joel Marcey

php,会话状态,基于引用重定向“home”链接

  •  1
  • Joel Marcey  · 技术社区  · 15 年前

    通常,网站有一个菜单栏,其中链接到网站主页、A页、B页等的不同页面。

    假设您有一个地址为的站点 http://www.example.com . 99%的用户在浏览器中输入该URL时,会将其定向到__home__表示的页面。它通常具有索引[.html.php]的可选扩展名(例如, http://www.example.com/index.html )但是,也有一些用例,根据用户访问您的网站的位置,您希望将它们重定向到不同的页面。例如,如果您的网站上有一个广告在推广您的页面,您可能希望将它们重定向到: http://www.example.com/camefromad.html 这看起来与您的普通主页大致相同,但可能会添加一些文字说明它们来自广告所在的页面。

    我的问题是:

    在用户从引用的页面登录到站点后,是否有方法使用php确保单击__home_链接始终转到 http://www.example.com/camerfromad.html 如果 用户在那里登陆开始?我想避免的是用户 http://www.example.com/camerfromad.html 然后单击菜单栏中的__home_157;,最后进入默认主页,无法返回到 http://www.example.com/camerfromad.html 页面(由于我不希望普通用户能够访问,所以在公共菜单中没有启用该登录页面)。

    这是我第一次使用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');
    }
    ?>
    

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   Arkh    15 年前

    为什么不将引用存储在会话变量中? 在您的登录页面中,您可以看到:

    <?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');
    }
    ?>
    
        2
  •  2
  •   jlb    15 年前

    你快到了!--只需将$referer保存在$u会话变量中。然后,您可以检查在随后的页面请求上是否设置了$_session['referer'],并相应地执行操作。