【问题标题】:Request URI returning two url's to $_SESSION array请求 URI 返回两个 url 到 $_SESSION 数组
【发布时间】:2015-05-25 21:56:06
【问题描述】:

过去 8 小时我一直在尝试破解这个。

我正在记录用户在 $_SESSION 数组中查看的 URL(在 wordpress 上)

来自我在所有页面中包含的 history.php:

session_start();

$currentpageurl= esc_url($_SERVER['REQUEST_URI']);

is_array($_SESSION["pageurl"]) or $_SESSION["pageurl"] = array();

$_SESSION['pageurl'][] = $currentpageurl;

然后我调用数组项来查看日志,如下所示:

foreach($_SESSION['pageurl'] as $key=>$value)
    {
    echo 'Page view '.$key.' was '."'".$value."'".' <br />';
    }

一切正常。但在结果中,我访问的帖子之前的帖子也记录为“访问过的页面”。我检查了所有文件中是否存在可能导致 http 请求的断开链接,并且所有内容都已检查。我什至将Request URI 更改为$_SERVER 之类的其他内容,例如SCRIPT URI,并且始终加载之前的帖子。

如果我访问这些页面:

mysite.com/article-y
mysite.com/article-z

数组显示之前的页面(未访问):

mysite.com/article-y 
mysite.com/article-x <--not visited, but somehow in session array
mysite.com/article-z

【问题讨论】:

  • 日志不应该是你的回显结果。这是什么日志?
  • 每次您访问带有此代码的页面时,它都会向 $_SESSION['pageurl'] 添加一个 Array 元素。
  • 这就是我想要的,记录所有访问过的页面。问题是我只访问页面 Y 和 Z,日志显示页面 X,我从未访问过。
  • 你在哪里/如何包含你的 history.php 文件?
  • @x-ray in functions.php。 include_once('history.php')

标签: php wordpress session request-uri


【解决方案1】:

当您观察到 $_SERVER['REQUEST_URI'] 变量的不同值时,几乎可以肯定,每次您查看特定页面时,都会发送另一个请求以检索上一篇文章的页面。发生这种情况的原因可能有多种,例如页面上的脚本和 iframe。但是,根据您的描述,link prefetching 可能是您观察到的原因。

您可以通过在浏览器中禁用链接预取来轻松检查(例如see here for Firefox)。

您网站的源代码中可能包含&lt;link rel='prev' ...&lt;link rel='next' ... 和/或&lt;link rel='prefetch' ... 标签,这些标签鼓励浏览器预取特定页面。但是删除这些并不意味着浏览器不会尝试预取任何内容。

仅在服务器端无法可靠地检查请求是否为预取请求。某些浏览器在加载预取时会发送额外的 HTTP 请求标头,但您不能依赖它。

解决此问题的一种方法是在您的网站中嵌入一个 javascript,该 javascript 通过向服务器上的某个脚本发送异步请求来记录每当呈现页面(例如执行脚本)或查看页面(使用 Visibility API) .

您可以在this answer 和上面的 cmets 中找到更多信息。

【讨论】:

  • 即使在使用可见性 API 时,我的数组也会在每次页面加载时填充两个项目。
  • 如果您从网站中删除跟踪 javascript 代码(显然是为了使用可见性 API 而插入的)会发生什么?
猜你喜欢
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
相关资源
最近更新 更多