Часто может понадобится способ определения ip адреса пользователя. Но тут все не так просто как кажется на первый взгляд. Например пользователь может ходить через прокси-сервер, а в некоторых случаях, если вы боретесь со спамом заголовки, в том числе и ip можно подделать. Разберемся что к чему.

Для начала введение в некоторые PHP функции:

HTTP_USER_AGENT - функция определяет браузер пользователя и операционную систему.
HTTP_HOST - доменное имя сервера на котором запущен скрипт.
SERVER_PORT - порт сервера, по-умолчанию 80.
REMOTE_ADDR - содержит ip адрес пользователя, часто сюда вставляется ip прокси.
HTTP_CLIENT_IP - содержит ip пользователя, но берется из getenv() и исключая прокси.
REMOTE_PORT - порт соединения браузера с сервером.
HTTP_X_FORWARDED_FOR - если пустое значение значит прокси не используется.

HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR очень легко подделать, т.к. это заголовки, вообще все что начинается на HTTP это http заголовки и их можно подделать. А вот REMOTE_ADDR подделать нельзя.

Поэтому для определения ip адреса стоит его и использовать.

Т.е. если исключить вариант подделки адресов, то получится что если HTTP_X_FORWARDED_FOR пустая переменная, то настоящий ip адрес клиента REMOTE_ADDR, а если не пустая то HTTP_X_FORWARDED_FOR содержит ip адрес клиента, а REMOTE_ADDR проксю.

Ну и в конце концов если вам нужно определение ip для бана спамеров или пользователей, используйте именно REMOTE_ADDR, ну и куки для верности.

(Visited 220 times, 1 visits today)