$ _SERVER не дает правильный IP-адрес

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

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

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

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

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

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

Не делай этого. Получите запрос от $_SERVER при $_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.bbb.ccc.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 (или 127.0.0.1).

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

1). Вам не нужно добавлять <?php echo $_SERVER['REMOTE_ADDR']; ?> <?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, local ips и всего этого.