Я работаю над сценарием, который будет сохранять ссылочный 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'] : '');
}
Любые идеи?
Referer:
это самое близкое, что вы когда-либо получите. Это никоим образом не надежно, но это самый надежный из всех 1 доступных вариантов. - person DaveRandom   schedule 31.07.2012