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