0

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

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

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

  3. 他们进入表单页面之前我网站上的最后一页

第三个很容易(只需使用),但前两个给我带来了问题。

我正在尝试通过使用会话变量来保存 #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'];
}
?>

然后再往下,作为测试代码(稍后更改为 input type=hidden 等):

<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 等,以强制创建新会话。

这段代码曾经在我的 pre-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'] 没有。

我很困惑,并且花了相当多的时间试图自己解决这个问题,所以任何解决这个问题的帮助都将不胜感激。

4

2 回答 2

0

我相信 sunliffe 掌握了这一点,因为我正在使用 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,如果您将您的评论作为“回复”发布,我会“接受”它,因为它最接近地引导我朝着正确的方向前进,但作为评论,我只能投票赞成,所以这就是我所做的。谢谢!

于 2012-10-25T20:09:28.970 回答
0

很有可能,您无法真正获得引荐来源网址,因为某些浏览器不会发送该 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-25T16:53:53.680 回答