Получить ID предыдущей посещенной страницы

7 дек. 2011 г., 17:18:40
Просмотры: 19.8K
Голосов: 7

Я хотел бы получить ID (или постоянную ссылку) страницы, которую посетитель просматривал непосредственно перед текущей страницей - другими словами, ID последней страницы в истории браузера.

Возможно ли это сделать? Есть ли идеи, как это реализовать?

3
Комментарии

Поищите внутри массива print_r( $GLOBALS );. Не уверен на 100%, но возможно он находится внутри $_GET/_REQUEST/_SESSION/_SERVER;...

kaiser kaiser
7 дек. 2011 г. 18:42:42

@kaiser спасибо, действительно есть HTTP_REFERER в _SERVER - он дает URL предыдущей страницы. Идеально!

ptriek ptriek
7 дек. 2011 г. 18:50:10

Это может быть полезно: https://codex.wordpress.org/Function_Reference/wp_get_referer

shasi kanth shasi kanth
10 апр. 2015 г. 18:37:26
Все ответы на вопрос 2
3

Разобьём это на две части:

Сначала создаём переменную, которая хранит URL последней посещённой страницы, вот так:

$prev_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

Затем вы можете использовать substr и strpos, чтобы обрезать всё между ?= и / после номера ID. Вот так:

$prev_url = 'http://www.yoursite.com/?p=123';
$id_block = substr($prev_url, strpos($prev_url, "?p=")+1);
$id = substr($id_block, 0, strpos($id_block, "/"));

... Или же вы можете использовать jQuery/Javascript для достижения того же результата.

Я не тестировал этот код, но он должен работать — дайте знать, как получится! Удачи ;)

7 дек. 2011 г. 18:51:30
Комментарии

спасибо - я уже думал в этом направлении, но в руководстве по php сказано об этом: "Адрес страницы (если есть), которая перенаправила пользователя на текущую страницу. Устанавливается пользовательским агентом. Не все пользовательские агенты устанавливают это значение, а некоторые предоставляют возможность изменять HTTP_REFERER как функцию. Короче говоря, этому нельзя полностью доверять." Поэтому я немного сомневаюсь, является ли это лучшим решением...

ptriek ptriek
7 дек. 2011 г. 18:56:54

Верно - HTTP_REFERER зависит только от сервера. Честно говоря, я не знаю других решений для этого. Если это не критически важная функция, я бы просто использовал HTTP_REFERER, так как он достаточно стабилен от агента к агенту.

cr0z3r cr0z3r
7 дек. 2011 г. 19:19:00

Это не критически важная функция, так что я просто использую это & предусмотрю запасной вариант.. Спасибо за помощь!

ptriek ptriek
7 дек. 2011 г. 19:31:46
1

Я использовал такой трюк, чтобы также проверять, является ли страница одной из страниц моего сайта:

// Получаем ссылку на предыдущую страницу из истории

$prev_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;

// Проверяем, что ссылка не пустая и содержит URL моего блога

if( !empty( $prev_url ) || strpos( $prev_url, (string)get_blog_details()->domain ) !== false ) :
    // Тогда отображаем ссылку только если это страница моего блога ?>
    <a href="<?php echo $prev_url; ?>" class="previous-history-link">Предыдущая страница из истории</a>
<?php endif; ?>
2 мар. 2015 г. 13:47:32
Комментарии

Просто небольшое замечание: HTTP_REFERER ненадежен, так как может быть отключен конечным пользователем, поэтому никогда не стоит на него полагаться

Pieter Goosen Pieter Goosen
2 мар. 2015 г. 13:59:51