Помогите переделать функцию по HTTP_REFERER

12
S
На сайте с 06.08.2008
Offline
130
1219

Имеется функция:

<?
function ps(){
$ref = $_SERVER['HTTP_REFERER'];
$SE = array('google.', 'mail.', 'yandex.', 'aport.', 'rambler.', 'search.', 'yahoo.');
foreach ($SE as $source) {
if (strpos($ref,$source)!==false)
return true;
}
return false;
}
?>

Т.е. если посетитель зашел с рефом из указанного массива, то с ним совершаются определённые действия..

Как изменить функцию, чтобы было "любой реф, кроме прямого введения урла (закладочный траф)"?

K
На сайте с 28.08.2012
Offline
0
#1

ну и налоите правило, если $_SERVER['HTTP_REFERER'] пустой, то...

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

O2
На сайте с 28.07.2012
Offline
7
#2
spiderbuber:
$ref = $_SERVER['HTTP_REFERER'];

У вас нет проверки на то, если $_SERVER['HTTP_REFERER'] пустой. А он будет пустой когда адрес набирают ручками.

siv1987
На сайте с 02.04.2009
Offline
427
#3

<?php

function ps(){
$ref = $_SERVER['HTTP_REFERER'];
if( $ref ) {
return true;
}
else {
return false;
}
}
?>
S
На сайте с 06.08.2008
Offline
130
#4

siv1987, с таким кодом при вбиве - отображается условие без рефа, но если ходить по страничками, то уже срабатывает условие, что реф есть.

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

+ я ставлю еще куку. Вот полный код:

<?php
function ps(){
$ref = $_SERVER['HTTP_REFERER'];
if( $ref ) {
return true;
}
else {
return false;
}
}

if (ps() || $_COOKIE['ps']==1) {
setcookie("ps","1",time()+60*60*24*30);
echo "Контент для юзера с рефом";
} else { echo " Контент для остальных";}
?>
siv1987
На сайте с 02.04.2009
Offline
427
#5
spiderbuber:
с таким кодом при вбиве - отображается условие без рефа, но если ходить по страничками, то уже срабатывает условие, что реф есть.


<?php
function ps(){
$ref = $_SERVER['HTTP_REFERER'];
if( $ref AND ! strpos($ref, $_SERVER['HTTP_HOST']) ) {
return true;
}
else {
return false;
}
}
?>
S
На сайте с 06.08.2008
Offline
130
#6

А так не работает "Контент для юзера с рефом"..

siv1987
На сайте с 02.04.2009
Offline
427
#7

ну тогда так точно должно правильно сработать


<?php
function ps(){
$ref = $_SERVER['HTTP_REFERER'];
$host = preg_quote( str_replace('www.', '', $_SERVER['HTTP_HOST']), '#' );
if( $ref AND ! preg_match( "#^http://(www\.)?{$host}#", $ref ) ){
return true;
}
else{
return false;
}
}
?>
LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#8

А может быть легче куку повесить?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
S
На сайте с 06.08.2008
Offline
130
#9

siv1987, теперь ок, спасибо! )

S
На сайте с 06.08.2008
Offline
130
#10

Как оказалось всё-равно не работает :(

Кука тоже не помогает..

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

Вот код с кукой:

<?php
function ps(){
$ref = $_SERVER['HTTP_REFERER'];
$host = preg_quote( str_replace('www.', '', $_SERVER['HTTP_HOST']), '#' );
if( $ref AND ! preg_match( "#^http://(www\.)?{$host}#", $ref ) ){
return true;
}
else{
return false;
}
}

if (ps() || $_COOKIE['ps']==1) {
setcookie("ps","1",time()+60*60*24*30);
echo "Контент для юзера с рефом";
} else { echo "Контент для остальных";}
?>
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий