Как передать HTTP реферер в скрипт PHP - PullRequest
0 голосов
/ 07 октября 2009

Кажется, все должно быть просто. Любые указатели будут высоко оценены.

Рассмотрим три сайта:

  • widgetserver.com, который обслуживает виджеты на клиентских сайтах
  • clientsite.com, на котором отображается виджет
  • previoussite.com, сайт, который ссылается на clientsite.com

На странице clientsite.com есть фрагмент кода, который вызывает функцию PHP на widgetserver.com. Это выглядит так:

<script type="text/javascript" src="http://widgetserver.com/show_widget.php></script>

Когда загружается сайтitesite.com, он запускает «show_widget.php», который, в свою очередь, размещает виджет на странице.

Вот где я застрял: я хотел бы получить доступ к сайту, который направил пользователя на clientsite.com изнутри "show_widget.php", но пока в этой функции мы находимся на widgetserver.com, поэтому ссылающийся сайт - это клиентский .com, а не previoussite.com.

Можно ли каким-то образом передать рефереру clientite.com файл "show_widget.php"?

Ответы [ 3 ]

4 голосов
/ 07 октября 2009

document.referrer содержит необходимую информацию о реферере, поэтому, если они работают с javascript, вы можете сделать что-то вроде этого:

<script language="javascript" type="text/javascript">
var script = document.createElement("script");
script.src = "http://widgetserver.com/show_widget.php?r="+document.referrer;
document.getElementsByTagName("head")[0].appendChild(script);
</script>

Для этого потребуется выйти за пределы тега head (если только функция не связана с событием готовности документа или чем-то еще), иначе произойдет сбой.

Идея заключается в том, чтобы создать динамический тег на странице с необходимыми атрибутами. Первая строка создает его, вторая строка устанавливает скрипт src, а третья страница загружает его в DOM-элемент document.head, который вызывает его оценку, и загружает документ по мере необходимости.

Если ваши клиенты используют jQuery, проще использовать $ .getScript с аналогичным использованием document.referrer

1 голос
/ 07 октября 2009

Вы можете обнаружить указанный в основном скрипте clientide.com и передать его в качестве переменной в ваш скрипт:

// clientsite.com script
<?PHP

    echo $main_page;
    $ref = $_SERVER['HTTP_REFERER'];
    echo '<script type="text/javascript" ' .
      'src="http://widgetserver.com/show_widget.php?r=' . $ref . '></script>';

?>

// widgetserver.com script
<?PHP
    $original_referrer = $_REQUEST['r'];
?>
1 голос
/ 07 октября 2009

Вы не можете «угадать» эту информацию из вашего show_widget.php сценария: клиентский сайт должен будет передать эту информацию в ваш сценарий.

Это означает, что ваш виджет должен быть включен в некоторый код, подобный этому (при условии, что страница на клиентском сайте генерируется в PHP) :

<script 
    type="text/javascript" 
    src="http://widgetserver.com/show_widget.php?referer=<?php echo urlencode($_SERVER['HTTP_REFERER']); ?>>
</script>

Конечно:

  • не забудьте убежать от реферера, вставляя его на страницу, для безопасности (и для получения действительного HTML)
  • реферер может присутствовать не всегда: он отправляется браузером пользователя и может быть как фальшивым, так и / или отключенным.

Чтобы не генерировать / отображать «Уведомление: неопределенный индекс: HTTP_REFERER», когда браузер пользователя не отправляет реферер, вам также может потребоваться добавить проверку, чтобы выяснить, определена ли она перед использованием - используйте для этого isset; например, что-то вроде этого может сделать:

<script 
    type="text/javascript" 
    src="http://widgetserver.com/show_widget.php?referer=<?php echo isset($_SERVER['HTTP_REFERER']) ? urlencode($_SERVER['HTTP_REFERER']) : ''; ?>>
</script>
...