首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Wordpress站点上的PHP访问场外引用程序(以及网站访问的第一页)

如何通过Wordpress站点上的PHP访问场外引用程序(以及网站访问的第一页)
EN

Stack Overflow用户
提问于 2012-10-25 16:43:40
回答 2查看 1.1K关注 0票数 0

我试图在Wordpress页面的隐藏表单字段中找到三件事:

  1. 在某人访问我网站上的任何页面之前访问的最后一个“离开”页面(例如,很可能是一个Google页面)
  2. 他们在我的网站上访问的第一页
  3. 我的网站上的最后一页,在他们进入表单页面之前

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

我试图通过使用会话变量来保存#1和#2,因此在每个页面的标题中,我都有以下代码:

代码语言:javascript
复制
<?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等),我得到了以下内容:

代码语言:javascript
复制
<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’没有显示。

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

EN

回答 2

Stack Overflow用户

发布于 2012-10-25 16:53:53

很有可能的是,您无法真正获得参考URL,因为有些浏览器不会发送这个URL,而有些人会禁用它,但是下面是您如何做到的,我将在这里给您提供一些额外的提示:

代码语言:javascript
复制
//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']); --我通常是这样做的,而且这通常是一种整洁的方法。

票数 0
EN

Stack Overflow用户

发布于 2012-10-25 20:09:28

我相信scunliffe有这方面的关键,因为我正在使用IE进行测试。

它现在运行良好,我认为这是因为实际上关闭并重新启动了IE (显然,删除cookie并不能做到这一点,尽管在Firefox中这很好)。

我还稍微改变了我所做的工作,只在一个会话变量中保存完整的站点浏览历史记录,而不是仅仅保存站点上的第一页和最后一页。

我得到的代码如下所示,它正好位于主题的header.php文件的顶部:

代码语言:javascript
复制
<?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页面中的信息:

代码语言:javascript
复制
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页面/表单上传递信息:

代码语言:javascript
复制
<input type="hidden" name="offsite_referer" value="[offsite-referer]" />
<input type="hidden" name="site_history" value="[site-history]" />

如果你把你的评论写成“回复”,我就会“接受”,因为这是我走向正确方向最接近的原因,但作为一种评论,我只能支持它,这就是我所做的。谢谢!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13073314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档