Jump to content
  • 0

Не могу записать реферальный хвост


Zverushka
 Share

Question

Есть задача - нужно получать реферальный хвост, то есть откуда на сайт пришел посетитель (например с поисковиков - с какого поискового запроса).

Я нашла в интернете лишь $_SERVER['HTTP_REFERER'];

Проблема в том, что эта перменная всегда содержит сам адрес сайта и все! Я даже перешла на сайт через поиск в гугле - но опять там просто ссылка на сам сайт.

Почему не работает и как реализовать?

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Ну так ты реферер сначала определи в самом лэндинге (осмелюсь предположить, что это снова лэндинг, да :)).

Если просто отправлять реферер в скрипте отправки письма, то естественно, там будет адрес самого сайта — скрипт отправки письма ведь с него вызван.

Попробуй сделать так: в странице самого лэндинга у каждой формы сделай скрытое поле, в значение которого записывай реферер, а вот уже потом это значение отправляй вместе с формой.

То есть, грубо говоря, как-то так это будет выглядеть:

<form action="..." method="POST"><input ...><input ...><input type="hidden" name="referrerLink" value="<?php echo $_SERVER['HTTP_REFERER']; ?>"><input type="submit" value="Отправить форму"></form>

После этого в скрипте отправки письма можно использовать переменную $_POST['referrerLink'] — в ней будет храниться реферер.

Ну, и для того, чтобы не было проблем с разрешением выполнения php-кода в html-страницах на том или ином хостинге, расширение у главной страницы сделай .php — на работоспособность это никак не повлияет.

Edited by hypnocolor
  • Like 1
Link to comment
Share on other sites

  • 0

@hypnocolor, огромное спасибо!!! 

/** * Реферальный хвост */$referer = $post["ref"];// Проверяем пришли ли из поисковикаif (stristr($referer, 'yandex.ru')) { $search = 'text='; $crawler = 'Yandex'; }if (stristr($referer, 'rambler.ru')) { $search = 'words='; $crawler = 'Rambler'; }if (stristr($referer, 'google.ru')) { $search = 'q='; $crawler = 'Google'; }if (stristr($referer, 'google.com')) { $search = 'q='; $crawler = 'Google'; }if (stristr($referer, 'mail.ru')) { $search = 'q='; $crawler = 'Mail.Ru'; }if (stristr($referer, 'bing.com')) { $search = 'q='; $crawler = 'Bing'; }if (stristr($referer, 'qip.ru')) { $search = 'query='; $crawler = 'QIP'; }// если посетитель пришел с поисковика то выполняем следующий кодif (isset($crawler)){// здесь мы приводим referer в понятный для человека вид	$ref_phrase = urldecode($referer);	// ищем ключевое слово в referer	eregi($search.'([^&]*)', $ref_phrase.'&', $phrase2);	if ($phrase2[1] != "") {		$ref_phrase = $phrase2[1];		print_r($phrase2);	}}// Если посетитель пришел с другого сайтаelse {  if ($referer != $site_address) {    $ref_phrase = $referer;  }}

Вот я немного модифицировала код. Возник вопрос - в запросе гугл ключ q всегда пустой в поиске - почему, с чего, как говорится? Не могу у гугла определить слова поиска...

 

Еще такой вопросик. Я использую для определения города по айпи ipgeobase - но вроде как он малова-то городов определяет. Есть варианты получше?

Edited by Zverushka
Link to comment
Share on other sites

  • 0

Насколько я понял, Гугл переключился на HTTPS, вследствие чего поисковой запрос из реферрера просто так не получить, если только Гугл Аналитиксом пользоваться.

 

Для определения города пользуюсь http://sypexgeo.net/ru/download/ — вроде хватает вполне :)

Link to comment
Share on other sites

  • 0

Хочу позаботиться о безопасности кода.

Если я вставляю $_SERVER['HTTP_REFERER']; в скрытый инпут для передачи потом в скрипт отправки формы - нужно ли мне защитить эти данные?
Сейчас мне в голову пришло обработать через htmlspecialchars - а в самом скрипте отправки - обратно декодировать - вытащить нужные данные и.. наверное - опять пропустить через htmlspecialchars (для записи в тело сообщения) - на всякий случай? 

Правильно ли я рассуждаю и все ли я учла?

Link to comment
Share on other sites

  • 0

ДекодироватЬ, потому что обратная функция так и называется decode - хотя по сути там ничего не кодируется)..

Мне тут уже подсказали, что можно не заботится о безопасности - я же в базу данных ничего не пишу:)....

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy