Запросите URI, возвращающий два URL в массив $ _SESSION

Я провел последние 8 часов, пытаясь взломать этот.

Я регистрирую URL, которые пользователи просматривают в массиве $ _SESSION (на 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

0

Решение

Как вы наблюдаете различные значения $_SERVER['REQUEST_URI'] переменная почти наверняка, что каждый раз, когда вы просматриваете определенную страницу, отправляется другой запрос на получение страницы предыдущего поста. Это может происходить по разным причинам, таким как скрипты и фреймы на вашей странице. Однако из того, что вы описываете, кажется, что предварительная загрузка ссылок является причиной того, что вы наблюдаете.

Вы можете легко проверить это, отключив предварительную выборку ссылок в вашем браузере (смотрите здесь для Firefox например).

Ты можешь иметь <link rel='prev' ..., <link rel='next' ... и / или <link rel='prefetch' ... теги в источнике вашего сайта, которые побуждают браузер предварительно выбирать определенные страницы. Однако их удаление не означает, что браузер не будет пытаться что-либо предварительно выбрать.

Невозможно надежно проверить, является ли запрос запросом предварительной выборки только на стороне сервера. Некоторые браузеры отправляют дополнительный заголовок HTTP-запроса при загрузке предварительной выборки, но вы не можете на это полагаться.

Одним из способов решения этой проблемы является встраивание в ваш веб-сайт javascript, который регистрирует каждый раз, когда страница отображается (например, выполняется скрипт) или просматривается (используя API видимости) отправив асинхронный запрос к какому-либо скрипту на вашем сервере.

Вы можете найти дополнительную информацию в этот ответ и комментарии к нему.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]