Информация о посетителе не сохраняется в базе данных при обращении к сайту из GOOGLE CHROME - PullRequest
0 голосов
/ 02 июля 2019

Оставайтесь со мной, так как я постараюсь объяснить сценарий. У меня есть база данных для моего веб-сайта, которая содержит информацию о посетителях. Я тестировал эту базу данных и веб-сайт, используя локальный хост с различными браузерами, такими как Firefox, IE и GoogleCrome. База данных работает нормально, так как я сохраняю «время», «IP-адрес», «имя браузера» и «страну» посетителя. Теперь, когда я разместил этот веб-сайт в домене, база данных отлично работает для Firefox, IE..but всякий раз, когда к веб-сайту обращаются из GoogleCrome, для этого нет записи в базе данных. Я использую базу данных XAMPP SQL для тестирования

Вот код этого

<?php
function get_browser_name($user_agent)
{
    if (strpos($user_agent, 'Opera') || strpos($user_agent, 'OPR/')) return 
'Opera Browser';
    elseif (strpos($user_agent, 'Edge')) return 'Edge';
    elseif (strpos($user_agent, 'Chrome')) return 'Google Chrome';
    elseif (strpos($user_agent, 'Safari')) return 'Safari';
    elseif (strpos($user_agent, 'Firefox')) return 'Firefox';
    elseif (strpos($user_agent, 'MSIE') || strpos($user_agent, 'Trident/7')) 
        return 'Internet Explorer';

    return 'Other';
}

$agent=get_browser_name($_SERVER['HTTP_USER_AGENT']);
$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp? 
ip=".getRealIpAddr());
$user ='root';
$pass ='';
$db ='simplecounter';


$db = new mysqli('localhost', $user, $pass, $db) or die("unable to 
     connect");


$find_counts = mysqli_query($db,"SELECT * FROM user_count");
$ip=$_SERVER['REMOTE_ADDR'];
$date = new DateTime("now", new DateTimeZone($xml- 
>geoplugin_timezone) );
$timee= $date->format('Y-m-d H:i:s');

$sql = "INSERT INTO user_count 
                (browser_name, ip_address, visiting_time, country)
        VALUES ( '.$agent.', '.$ip.', '.$timee.', 
                '.$xml->geoplugin_countryName.')";
if ($db->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}


function getRealIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share 
       internet
    {
        $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip 
       is pass from proxy
    {
        $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
        $ip=$_SERVER['REMOTE_ADDR'];
    }
        return $ip;
    }
?>

Невозможно найти основную причину проблемы, любая помощь будет отличной.

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Offtopic: эта функция getRealIpAddr () является ПЛОХОЙ, потому что если она подделана если я отправляю заголовок HTTP_CLIENT_IP, я могу переопределить мой реальный IP

Это долго для комментария. но я советую вам заменить функцию getRealIpAddr() на.

function getClientIPAddresses() {
   $ips = array();

   (isset($_SERVER['HTTP_CLIENT_IP'])) ? $ips["HTTP_CLIENT_IP"] = $_SERVER['HTTP_CLIENT_IP'] : null; 
   #... add the other headers cases as well. 

   (isset($_SERVER['REMOTE_ADDR'])) ? $ips["REMOTE_ADDR"] = $_SERVER['REMOTE_ADDR'] : null; 

   return $ips;
}

Поскольку эта функция будет возвращать массив с IP-адресами, которые использует клиент.

Имейте в виду, что заголовок X-Forwarded-For может использовать список IP-адресов, разделенных запятыми , и для него есть RFC 7239 (переадресованное расширение HTTP) .
Так что для правильной реализации потребуется больше исследований и кода.

0 голосов
/ 02 июля 2019

Мне удалось заставить ваш код работать на моем локальном хосте, но мне пришлось заменить функцию getRealIpAddr на функцию в этом ответе: https://stackoverflow.com/a/13646735/11724378

Также помните о том, что в вашем коде переменная $ ip переопределяется как просто $ _SERVER ['REMOTE_ADDR'], что также может привести к проблемам. Можно также объявить это перед загрузкой xml, вот так:

$ip = getRealIpAddr();
$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=" . $ip);

Google Chrome успешно вставлен в таблицу на моем конце. Проверьте, есть ли у вас какие-либо ограничения для этой переменной длины: правильно ли сохранен «Internet Explorer»? Может быть, всплывает какая-то другая ошибка SQL? Если ничего не работает, попробуйте var_dumping вашу команду sql и поэкспериментируйте с ней через PhpMyAdmin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...