2013-09-24 5 views
1

Я ищу отправку пользователю двух (или, может быть, более) страниц, откуда они пришли. Что до сих пор работаетPHP Referrer Referrer (рекурсивно)

<strong> 
    <a href="javascript:history.go(-3)"> 
     Click here to go back to the view 
    </a> 
</strong> 

Однако при вызове страницы [истории] обновления не отображаются.

У меня есть идея обратиться к рефереру. PHP дает мне $_SERVER['REFERER'] для использования, что нормально, но только до одного уровня. Как получить реферер (от реферера ...) от $_SERVER['REFERER']?

+0

Что значит «страница не обновляется» _? Когда вы вернетесь в историю браузеров, 9/10, страницы будут поступать из кеша браузера, поэтому, если вы имеете в виду это, на странице 1 пользователь может изменить содержимое, страница 2 благодарит их за вход, страница 3 приводит их к обзор, и это страница, содержащая ссылку на страницу1, 'history.go (-3)' будет, действительно, не работать. Вам просто нужно снова перенаправить их на страницу1, заставив новый запрос –

+0

Отредактировано, чтобы сделать его менее двусмысленным – Benda

+0

Ну, всегда есть сеансы, чтобы отслеживать «движения» _ клиента на вашем сайте. так что, если он/она необходимо перенаправить 3 источника назад, вы можете получить эту информацию из сеанса ... –

ответ

0

Pure JS. No PHP.

Измените существующий код следующим образом.

<strong> 
     <a href="javascript:window.name='autoLoad';history.go(-3)"> 
      Click here to go back to the view 
     </a> 
    </code> 

Теперь добавьте этот JS на страницу, на которой вы перенаправлены. сказать test.html при нажатии history.go(-3)

function autoLoad(){ 
    if (window.name=='autoLoad') { 
    location.reload(); 
    window.name=''; 
    } 
} 

и в теге тела добавить этот

<body onload="autoLoad()"> 
+1

Спасибо за это. Он работает нормально и достигает того, чего я хотел. Я хочу проголосовать, но SO жалуется, что у меня недостаточно очков репутации. Еще раз спасибо – Benda

1

Насколько я знаю, вы не можете сделать это в PHP. Простой ответ - нет, потому что PHP является серверным, и получает только текущий реферер, в то время как Javascript - это размер клиента, работающий в браузере, который на самом деле имеет 2 или более этапов истории.

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

0

В переменной сервера $_SERVER['REFERER'] есть только последний источник. Если вы хотите использовать предыдущий, вы должны сохранить их в сеансе. Проблема в том, что вы не можете узнать, какая вкладка браузера инициализировала запрос, поэтому ваша история будет смешанной для всех вкладок.

Решение будет использовать JS, чтобы заставить браузер перезагружать страницу.

0

Вы могли бы сделать что-то вроде этого, или использовать куки, если вы хотите их больше, но дон Для этого вам нужен PHP.

<input type="hidden" id="reload" value="0"> 

<script type="text/javascript"> 
    window.onload = function(){ 
    var el = document.getElementById("reload"); 

    if(el.value != "0")   
    { 
     window.location.reload(); 
    } 

    el.value="1"; 
    } 
</script>