Задать вопрос
weranda
@weranda

Почему поле user-agent бывает пустым?

Есть код на PHP, записывающий в файл IP и user-agent.
$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];

$file = 'user-agents.txt';
$current = file_get_contents($file);
$current .= "\n" . str_pad($ip, 20) . "" . str_pad(date("d.m.Y H:i:s"), 25) . "" . $agent;
file_put_contents($file, $current);

Замечаю в файле отсутствующие данные о user-agent, IP есть, а user-agent — нет. Подскажите пожалуйста почему так происходит — ошибка в коде или боты/люди с отсутствующим user-agent и можно ли таких смело блокировать или есть вероятность того, что это могут быть исковые системы?
  • Вопрос задан
  • 1500 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 4
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Во-первых, есть масса плагинов анонимизации к браузерам, которые этот заголовок скрывают, да и Chrome в режиме инкогнито, если мне не изменяет память. его не передаёт. Во-вторых, обращаться к сайту могут не только бразуеры, но и другие программы, которые могут и не устанавливать этот заголовок.
Ответ написан
Комментировать
@rudikov
Дополню слова Сергей Горностаев.
Плагины анонимизации обычно меняют user-agent на другой.
В режима инкогнито браузеры все же передают user-agent (проверил на Chrome, Opera).
Все крупные поисковые системы указывают user-agent для своих ботов.

Так что это либо программы, либо браузеры с заблокированной отправкой user-agent посредством плагинов.
Касательно Вашего кода ничего не скажу, не знаю PHP.
Ответ написан
Комментировать
@galliard
User-Agent - необязательный заголовок. Его можно передавать, можно не передавать, это на усмотрение клиента.

Вопрос в другом. А зачем вам блокировать клиентов без юзер-агента? Они вам как-то мешают?
Ответ написан
Fortoo
@Fortoo
Top-Web OpenCart
IP есть, а user-agent — нет


У меня была похожая ситуация в OpenCart2.1.
Когда отрабатывал попап Заказать звонок, то данные (без товара) записывались в Заказы.
Сначала я заметил что IP подменяется, а user-agent по прежнему не было.

Потом я нашёл причину в неявной переадресации.

Скрипт содержал "странный способ обращению к методу контролера"
$array_call = array('name' => $_POST['name'], 'phone' => $_POST['phone']);
$info_call = base64_encode(json_encode($array_call ));
file_get_contents('http://' . $_SERVER['SERVER_NAME'] . '/index.php?route=checkout/checkout/ajaxone&info=' . $info_call ;);


file_get_contents- отправляет запрос на адрес в данном случае
После срабатывало событие и запускало другой контроллер, но даже оттуда я не мог вытащить
$_SERVER
$_COOKIE
$this->request->cookie


Я переделал запись Заказа (через обращение внутри контроллеров) и всё заработало
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы