$ SERVER ['REMOTE ADDR'] не дает правильный ip-адрес

Я делаю форму с PHP, и я хочу сохранить запись IP-адресов пользователя. Это snip-it кода, который я использовал:

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />

когда я открываю код в XAMPP и читаю источник, значение имеет IP-адрес, отличный от моего:

<input type="hidden" name="ip" value="::1" />

этот IP-адрес обычно происходит, когда я использую его в localhost (XAMPP)?
Если нет, есть ли какие-либо альтернативы в захвате IP-адреса пользователя?

6 ответов


<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />

не делай этого. Получить запрос от $_SERVER при отправке формы. Получение его, когда форма генерируется и хранение его в форме просто дает людям возможность изменить его.

Does this IP address normally happen when I use it in a localhost (XAMPP)?

да. Получение локального IP-адреса (IPv6) является нормальным при запросе страницы из localhost.


IP ::1 является "localhost" в версии IPv6. Ваш компьютер настроен с IPv6-и, следовательно, вы получаете этот IP-адрес. Вероятно, при развертывании приложения на живом сервере IPv6 не будет настроен на сервере, и ваше приложение получит более знакомый IPv4-адрес (например, aaa.ГЭБ.КТС.ddd).

С другой стороны, $_SERVER['REMOTE_ADDR'] может не всегда содержать правильный адрес. Лучше использовать:

if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip_address = $_SERVER['REMOTE_ADDR'];
}

':: 1 ' - это IPV6-версия localhost (или 127.0.0.1).

открыть порт 80 и посетите страницу с вашего IP-адреса. Должно работать нормально тогда :).


1). Вам не нужно добавлять <?php echo $_SERVER['REMOTE_ADDR']; ?> в форме. В этом случае его легко подделать (на самом деле это легко в любом случае). Лучше добавить IP к данным на стороне сервера.

2) вы также можете посмотреть на $_SERVER['HTTP_X_FORWARDED_FOR']. Если у пользователя есть прокси, некоторые из них (прозрачные прокси) размещают там реальный IP пользователя.

3) всего Примечание: данные о IP не заслуживает.


Это на самом деле ваш IP. Пусть и ваш протоколу IPv6 IP и не по протоколу IPv4.

в IPv6:: 1 означает localhost / 127.0.0.1.


if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARTDED_FOR'] != '') {
                $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
            } else {
                $ip_address = $_SERVER['REMOTE_ADDR'];
            }   

этот код возвращает ip клиента. Если вы думаете, что это IP-адрес сервера, вы, вероятно, правы, потому что ваш сервер (предположительно) размещен на вашем ПК. Поскольку ваш клиент (ПК) и сервер запускаются на одном ПК, они оба имеют один и тот же IP. Если вы этого не понимаете, вам действительно нужно провести исследование ips, локальных ips и всего такого.