Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Wordpress网站上的PHP访问非现场参考(以及现场访问的第一页)_Php_Wordpress_Session Variables - Fatal编程技术网

如何通过Wordpress网站上的PHP访问非现场参考(以及现场访问的第一页)

如何通过Wordpress网站上的PHP访问非现场参考(以及现场访问的第一页),php,wordpress,session-variables,Php,Wordpress,Session Variables,我试图在Wordpress页面的隐藏表单字段中输入三个内容: 在有人访问我网站上的任何页面之前访问的最后一个“非现场”页面(例如,很可能是谷歌页面) 他们在我的网站上访问的第一页 在他们转到表单页面之前,我的站点上的最后一个页面 第三个很简单(只需使用),但前两个给我带来了问题 我试图通过使用会话变量来保存#1和#2,以便在每个页面的页眉中都有以下代码: <?php session_start(); if (! isset($_SESSION['offsite_referer'])) {

我试图在Wordpress页面的隐藏表单字段中输入三个内容:

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

  • 他们在我的网站上访问的第一页

  • 在他们转到表单页面之前,我的站点上的最后一个页面

  • 第三个很简单(只需使用),但前两个给我带来了问题

    我试图通过使用会话变量来保存#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'];
    }
    ?>
    
    
    
    然后进一步,我有,作为测试代码(稍后更改为输入类型=隐藏等):

    场外参考:

    第一页:

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

    出于某种原因,$\u SESSION['offsite\u referer']总是作为我的主页结束,即使我直接通过另一个站点的链接点击表单页面(/free reports)。同样,第一页总是显示为/

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

    这段代码在我之前的Wordpress网站上运行得很好,所以我只能认为它与WP有关,特别是WP的重定向(WP的mod_rewrite stuff in.htaccess)

    我尝试将$\u会话['offsite\u referer']=$\u服务器['HTTP\u referer']更改为wp\u get\u original\u referer(),但似乎没有效果

    顺便说一句,如果我访问我的表单页面(at/free reports/)作为我站点上的第一个页面(在清除cookies等之后),并打印$u服务器['HTTP\u REFERER'],它会正确显示最后一个非站点页面-即使$u会话['offsite\u REFERER']没有


    我非常困惑,并且花了相当多的时间试图自己解决这个问题,因此,如果有人能帮我解决这个问题,我将不胜感激。

    很可能,你无法真正获得referer URL,因为有些浏览器不发送该URL,有些人会禁用该URL,但以下是你如何做到这一点的方法,我将在这里给你一些额外的提示:

    //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>";
    }
    
    //首先,初始化会话
    会话_start();
    //现在调用logvisit()来记录用户来自何处
    logvisit();
    函数logvisit(){
    $\会话['offsite\u referer']=$\服务器['HTTP\u referer'];
    $browser=$\u SERVER['HTTP\u USER\u AGENT'];//获取用户正在使用的浏览器
    //如果要测试它(如果不想打印该信息,请禁用下面的代码):
    回显“场外参考:美元会话['Offsite\u referer']
    ”; 回显“浏览器:$Browser
    ”; }
    然后,要销毁会话,可以使用
    unset($\u session['offsite\u referer'])
    
    我通常就是这样做的,而且这通常是一种整洁的方式。

    我相信scunliffe掌握了关键,因为我使用IE进行测试

    它现在可以正常工作了,我认为这是因为实际上关闭并重新启动了IE(显然,正如你所想,仅仅删除cookies并不能做到这一点,即使这在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'] . ';');
    ?>
    
    然后在我的Wordpress页面/表格上传递信息:

    <input type="hidden" name="offsite_referer" value="[offsite-referer]" />
    <input type="hidden" name="site_history" value="[site-history]" />
    
    
    

    斯肯利夫,如果你把你的评论作为“回复”发表,我会“接受”它,因为这是最接近引导我走向正确方向的东西,但作为一个评论,我只能对它投赞成票,所以我就是这么做的。谢谢

    作为旁注,请注意,如果用户使用Internet Explorer访问您的站点,您可能实际上没有获得参考值:您是否使用Wordpress测试过此代码?我的代码适用于非Wordpress站点,似乎Wordpress正在破坏/替换原始HTTP\U引用程序。如果你用Wordpress测试了上面的代码,你把上面的代码放在了什么文件中?我在我的一个个人项目中使用了上面的代码,大部分时间都很好。也许你应该创建一个索引页面,在那里记录referer会话,然后重定向到你的WordPress站点。我会在WordPress文件中搜索诸如:HTTP_REFERER之类的值,如果发现任何可能干扰的内容,请禁用它。
    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');
    
    <input type="hidden" name="offsite_referer" value="[offsite-referer]" />
    <input type="hidden" name="site_history" value="[site-history]" />