$ _SERVER ['REMOTE_ADDR'] не дает правильный IP-адрес
Я делаю форму с PHP, и я хочу вести учет IP-адресов пользователей. Это снип-код кода, который я использовал:
<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />
Когда я открываю код в XAMPP и читаю источник, значение имеет IP-адрес, отличный от моего:
<input type="hidden" name="ip" value="::1" />
Обычно ли этот IP-адрес возникает, когда я использую его в локальном хосте (XAMPP)?
Если нет, есть ли какие-либо альтернативы для захвата IP-адреса пользователя?
Ответы
Ответ 1
<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) является нормальным, когда вы запрашиваете страницу с локального хоста.
Ответ 2
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'];
}
Ответ 3
':: 1' - это IPv6-версия localhost (или 127.0.0.1).
Откройте порт 80 и перейдите на страницу с вашего IP-адреса. Должен работать нормально тогда:).
Ответ 4
1). Вам не нужно добавлять <?php echo $_SERVER['REMOTE_ADDR']; ?>
в форму. В этом случае легко подделать его (на самом деле это легко в любом случае). Лучше добавьте IP к данным на стороне сервера.
2) Вы также можете посмотреть $_SERVER['HTTP_X_FORWARDED_FOR']
.
Если у пользователя есть прокси-сервер, некоторые из них (прозрачные прокси) размещают там реальный IP-адрес.
3) Просто отметьте: данные об IP не заслуживают доверия.
Ответ 5
Это ваш IP-адрес. Хотя ваш IPv6 IP, а не IPv4.
В IPv6,:: 1 означает localhost/127.0.0.1.
Ответ 6
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 и всего этого.