我试图在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'];
}
?>然后,作为测试代码(稍后将更改为输入type=hidden等),我得到了以下内容:
<p>offsite_referer: <?= $_SESSION['offsite_referer'] ?></p>
<p>first_page: <?= $_SESSION['first_page'] ?></p>(FWIW,我的wp-config.php顶部也有session_start() )。是的,我的网站已经关闭了register_globals。)
由于某种原因,即使我直接通过另一个站点的链接访问表单页面(/free-reports),$_SESSION‘’offsite_referer‘也总是作为我的主页结束。类似地,first_page总是显示为/
是的,在尝试期间,我正在清除所有cookie等等,以强制创建一个新会话。
这段代码过去在我的前Wordpress站点上运行得很好,所以我只能认为它与WP有关,特别是WP的重定向(WP在.htaccess中的.htaccess)。
我尝试将$_SESSION‘’offsite_REFERER‘=$_SERVER’‘HTTP_REFERER’改为wp_get_original_referer(),但它似乎没有效果。
顺便提一句,如果我访问我的表单页面(at /free-reports/)作为我网站上的第一页(在清除cookie等之后)在打印$_SERVER‘’HTTP_referer‘时,它正确地显示了最后一个离站页面--尽管$_SESSION' offsite _referer’没有显示。
我很困惑,并且花了相当长的时间试图自己解决这个问题,所以任何帮助解决这个问题都会很感激。
发布于 2012-10-25 16:53:53
很有可能的是,您无法真正获得参考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>";
}然后,为了破坏会话,您可以使用unset($_SESSION['offsite_referer']); --我通常是这样做的,而且这通常是一种整洁的方法。
发布于 2012-10-25 20:09:28
我相信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]" />如果你把你的评论写成“回复”,我就会“接受”,因为这是我走向正确方向最接近的原因,但作为一种评论,我只能支持它,这就是我所做的。谢谢!
https://stackoverflow.com/questions/13073314
复制相似问题