我正在尝试将三件事件放入Wordpress页面的隐藏表单字段中:
在有人访问我网站上的任何网页(例如很可能是Google网页)之前访问过的最后一个“非现场”页面
他们访问我网站的第一页
我们网站上的最后一页,然后才转到表单页面
第三个很简单(只是使用),但前两个给我带来了问题。
我正在尝试使用会话变量保存#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']没有。
我非常困惑,并花了相当多的时间试图自己解决这个问题,所以任何帮助解决这个问题都会受到赞赏。
答案 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,如果你发表你的评论作为“回复”,我会“接受”它,因为它是最接近我的正确方向,但作为一个评论我只能赞成它所以这是什么我做到了。谢谢!