Как вы можете обойти повторную отправку данных http referrer при обновлении в php? - PullRequest
0 голосов
/ 05 февраля 2009

У меня на сайте есть система подсчета совпадений IN / OUT. Когда пользователь отправляется на мой сайт, я беру реферера, убираю домен, ищу домен и +1 к hit_in. Очень просто. Что я обнаружил, так это то, что если пользователь обновляет страницу, реферер повторно отправляется на сайт, и он считается как +1. Еще хуже то, что если пользователь нажимает на какую-либо ссылку на сайте, а затем нажимает кнопку НАЗАД, чтобы перейти на исходную страницу, реферер повторно отправляется, и он считается еще одним +1. Поэтому, если иностранный сайт отправляет мне 1 пользователя, который нажимает на ссылку на видео, просматривает видео, нажимает НАЗАД в своем браузере, а затем делает это 3 раза, он будет считаться, как если бы сайт отправил мне 4 пользователя, хотя на самом деле это просто 1.

В любом случае я мог бы предотвратить 2 примера, не регистрируя все IP-адреса и не проверяя время доступа для каждого IP-адреса перед выполнением +1.

Ответы [ 3 ]

2 голосов
/ 05 февраля 2009

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

1 голос
/ 05 февраля 2009

Вот сценарий реферера, который я иногда использую.

Поместите это в свой файл функций.

function referer()
{
    if(isset($_SERVER["HTTP_REFERER"]) && substr($_SERVER["HTTP_REFERER"], 0, 22) != "http://www.example.com" && substr($_SERVER["HTTP_REFERER"], 0, 18) != "http://example.com")
    {
        $result = sprintf("INSERT INTO referer (referer, ip, date) VALUES ('%s', '%s', '%d')", mysql_real_escape_string($_SERVER["HTTP_REFERER"]), mysql_real_escape_string($_SERVER["REMOTE_ADDR"]), time());
        $query = mysql_query($result);

        if($query)
        {
            return true;
        }
        else 
        {
            return false;
        }
    }
}

И где-то в вашем индексном файле

session_start();
if(!isset($_SESSION["referer"]))
{
    if(referer())
    {
        $_SESSION["referer"] = 1;
    }
}
1 голос
/ 05 февраля 2009

сделать что-то вроде,

Если у пользователя нет файла cookie 'referer_logged', зарегистрируйте его реферер и установите файл cookie.

Это позволит регистрировать только одного реферера на пользователя.

...