如何在Wordpress网站上通过PHP访问异地引用(以及在网站上访问的第一页)

时间:2012-10-25 16:43:40

标签: php wordpress session-variables

我正在尝试将三件事件放入Wordpress页面的隐藏表单字段中:

  1. 在有人访问我网站上的任何网页(例如很可能是Google网页)之前访问过的最后一个“非现场”页面

  2. 他们访问我网站的第一页

  3. 我们网站上的最后一页,然后才转到表单页面

  4. 第三个很简单(只是使用),但前两个给我带来了问题。

    我正在尝试使用会话变量保存#1和#2,以便在每个页面的标题中,我都有以下代码:

    <?php
    session_start();
    if (! isset($_SESSION['offsite_referer'])) {
      $_SESSION['offsite_referer'] = $_SERVER['HTTP_REFERER'];
    }
    if (! isset($_SESSION['first_page'])) {
      $_SESSION['first_page'] = $_SERVER['REQUEST_URI'];
    }
    ?>
    

    然后我进一步向下,作为测试代码(稍后将更改为输入类型=隐藏等):

    <p>offsite_referer: <?= $_SESSION['offsite_referer'] ?></p>
    <p>first_page: <?= $_SESSION['first_page'] ?></p>
    

    (FWIW,我的wp-config.php顶部也有session_start()。是的,我的网站已关闭register_globals。)

    出于某种原因,$ _SESSION ['offsite_referer'] 总是最终成为我的主页,即使我直接通过其他网站的链接点击表单页面(/ free-reports)。同样,first_page 始终显示为/

    是的,我会在尝试之间清除所有Cookie等,以强制创建新会话。

    这段代码以前在我的WordPress前网站上工作得很好,所以我只能认为它与WP有关,特别是WP的重定向(WP的mod_rewrite东西在.htaccess中)

    我尝试将$ _SESSION ['offsite_referer'] = $ _SERVER ['HTTP_REFERER']更改为wp_get_original_referer(),但似乎没有效果。

    顺便提一下,如果我访问我的表单页面(在/ free-reports /)作为我网站上的第一页(清除cookie等)并打印$ _SERVER ['HTTP_REFERER']后,它会正确显示最后的非现场页面 - 即使$ _SESSION ['offsite_referer']没有。

    我非常困惑,并花了相当多的时间试图自己解决这个问题,所以任何帮助解决这个问题都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

很可能,你不能真正获得引用网址,因为有些浏览器不发送,有些人禁用它,但是你可以这样做,我会在这里给你一些额外的提示:

//first of all, initialize the session
session_start();
//Now call logvisit() to log where the user is coming from
logvisit();
function logvisit() {
         $_SESSION['offsite_referer'] = $_SERVER['HTTP_REFERER']);
         $browser = $_SERVER['HTTP_USER_AGENT']; //Gets the browser the user is using
         //If you want to test it (disable the code below if you don't want to print that information):
         echo "Offsite referer: $_SESSION['offsite_referer']<br>";
         echo "Browser: $browser<br>";
}

然后要销毁会话,您可以使用unset($_SESSION['offsite_referer']); 这就是我通常这样做的方式,这通常是一种整洁的方式。

答案 1 :(得分:0)

我相信scunliffe有关键,因为我正在使用IE进行测试。

它现在工作正常,我认为实际关闭并重新启动IE(显然只是删除cookie不会这样做,正如你所想,即使在Firefox中工作正常)。

我还稍微改变了我正在做的事情,只是在会话变量中保存完整的现场浏览历史记录,而不是仅保存网站的第一页和最后一页。

我最终得到的代码如下,它位于我主题的header.php文件的顶部:

<?php
session_start();
if (! isset($_SESSION['site_history'])) {
   $_SESSION['offsite_referer'] = $_SERVER['HTTP_REFERER'];
   $_SESSION['site_history'] = '';
}
$_SESSION['site_history'] .= ($_SERVER['REQUEST_URI'] . ';');
?>

当我试图解决这个问题时,我最初也在wp-config.php中使用了session_start(),但是能够删除它(只留下header.php中的上述代码)并且事情仍然正常。

如果有人发现此页面想要做类似的事情,我可以通过在我的主题的functions.php中添加以下内容来访问我的WP页面中的这些信息:

function get_offsite_referer() { return $_SESSION['offsite_referer']; }
add_shortcode('offsite-referer', 'get_offsite_referer');
function get_site_history() { return $_SESSION['site_history']; }
add_shortcode('site-history', 'get_site_history');

然后在我的Wordpress页面/表单上传递信息:

<input type="hidden" name="offsite_referer" value="[offsite-referer]" />
<input type="hidden" name="site_history" value="[site-history]" />
scunliffe,如果你发表你的评论作为“回复”,我会“接受”它,因为它是最接近我的正确方向,但作为一个评论我只能赞成它所以这是什么我做到了。谢谢!