Что я могу использовать вместо HTTP_REFERER для надежного отслеживания?

Я работаю над сценарием, который будет сохранять ссылочный URL-адрес для каждого посетителя в переменную сеанса, а затем сохранять его в БД с другими данными, такими как ключевое слово/фраза Google, которая привела посетителя на веб-сайт, а также если ссылочная ссылка был обычным листингом Google (также известным как органический результат) или платной ссылкой (Google Adwords). До сих пор я придумал это, но это не всегда работает. Прочитав больше, я обнаружил, что в некоторых условиях http_referer заблокирован или скрыт, поэтому я ищу лучший способ заставить это работать.

    $session = & JFactory::getSession();
    if (!$session->get('referrer', $origref, 'extref')) //If does not exist
    {
        $origref = $_SERVER['HTTP_REFERER'];
        $session->set('referrer', $origref, 'extref');

        $url = $session->get('referrer', $origref, 'extref');
        if(!$url && !$url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : false) {
            $q = 'No referer';
        }

        $parts_url = parse_url($url);
        $query = isset($parts_url['query']) ? $parts_url['query'] : (isset($parts_url['fragment']) ? $parts_url['fragment'] : '');
        if(!$query) {
            $q = 'Not from Google';
        }
        parse_str($query, $parts_query);
        $q = isset($parts_query['q']) ? $parts_query['q'] : isset($parts_query['oq']) ? $parts_query['oq'] : (isset($parts_query['p']) ? $parts_query['p'] : 'could not fetch keyword');

      if(stristr($origref, 'aclk')) { // if referer is a google adwords link as opposed to an organic link
          $type = ', paid link, '.$_SERVER['HTTP_USER_AGENT'];
      } else {
          $type = ', organic result, '.$_SERVER['HTTP_USER_AGENT'];
      }

    $ginfo = $q.$type;
    $session->set('referrer', $ginfo, 'extref');  
    }

    function search_engine_query_string($url = false) {
        if(!$url && !$url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : false) {
            return 'No referer';
        }

        $parts_url = parse_url($url);
        $query = isset($parts_url['query']) ? $parts_url['query'] : (isset($parts_url['fragment']) ? $parts_url['fragment'] : '');
        if(!$query) {
            return 'Not from Google';
        }
        parse_str($query, $parts_query);
        return isset($parts_query['q']) ? $parts_query['q'] : (isset($parts_query['p']) ? $parts_query['p'] : '');
    }

Любые идеи?


person bikey77    schedule 31.07.2012    source источник
comment
Referer: это самое близкое, что вы когда-либо получите. Это никоим образом не надежно, но это самый надежный из всех 1 доступных вариантов.   -  person DaveRandom    schedule 31.07.2012
comment
Нет надежного метода отслеживания людей. Есть только менее подверженные сбоям методы   -  person Marc B    schedule 31.07.2012


Ответы (2)


Другим типичным методом является наличие специального URL-адреса входа для идентификатора трекера. Например:

subdomain.mysite.com/tracker?userid=12345&source=adwords

При попадании по этому URL-адресу вы знаете, что источником является adwords, и вы немедленно перенаправляете пользователя обратно на главную страницу с помощью переадресации header. Таким образом, они не имеют ни малейшего представления об отслеживании, и оно должно быть достаточно надежным.

person mellamokb    schedule 31.07.2012

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

Если это необходимо для анализа, вы можете использовать Google Analytics и Инструменты Google для веб-мастеров.

Они оба дополняют друг друга и в значительной степени хотят, чтобы вы хотели выполнить свой сценарий.

person Tivie    schedule 31.07.2012