как однозначно идентифицировать удаленный компьютер в php?

как однозначно идентифицировать удаленный компьютер в среде прокси-сервера, я использовал $ _SERVER ['REMOTE_ADDR'], но все машины в прокси-сети имеют одинаковый IP-адрес, есть ли способ

Никогда не зависеть от информации, поступающей от клиента. В этом случае вы столкнулись с простыми сетевыми проблемами (вы никогда не можете быть уверены, что IP-адрес клиента верен), в других случаях клиент может обманывать информацию по назначению.

Если вам нужно однозначно идентифицировать своих клиентов, передайте им cookie при первом посещении, это лучшее, что вы можете сделать.

Лучше всего:

$uid = md5($_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']); 

однако нет никакого способа узнать, изменили ли они свой пользовательский агент или другой браузер.

Вы могли бы использовать некоторые другие заголовки, чтобы помочь, как и эти (те, которые приходят на ум при просмотре сбрасывания $_SERVER ):

  • HTTP_USER_AGENT
  • HTTP_ACCEPT
  • HTTP_ACCEPT_LANGUAGE
  • HTTP_ACCEPT_ENCODING
  • HTTP_ACCEPT_CHARSET

Используя несколько данных, поступающих от клиента, вы сможете различать разных клиентов (чем больше информации вы используете, тем больше шансов, что по крайней мере один из них отличается между двумя клиентами) …

… Но это не будет идеальным решением 🙁

В зависимости от типа прокси-программного обеспечения и его конфигурации может быть заголовок с именем X-Forwarded-For , который вы можете использовать:

HTTP-заголовок X-Forwarded-For (XFF) является де-факто стандартом для идентификации исходящего IP-адреса клиента, подключающегося к веб-серверу через прокси-сервер HTTP или балансировщик нагрузки. Это стандартный заголовок запроса RFC, который был представлен разработчиками прокси-сервера кэширования Squid.

Но я бы тоже не полагался на это: он, вероятно, не всегда будет присутствовать (не думайте, что его «требуется»)

Удачи !

Я не думаю, что есть другие способы делать то, что вы хотите. Это связано с тем, что прокси-сервер проксирует запросы клиентов и действует от их имени. Таким образом, клиенты практически скрыты с точки зрения сервера. Однако я могу ошибаться.

Если вам известно о прокси-сервере, я думаю, это означает, что это какая-то локальная сеть компании. Вы контролируете локальную сеть? Возможно, создание и установка некоторого плагина ActiveX, который отправляет уникальный для машины идентификатор на сервер, может быть решением.

В общем, прокси-серверы HTTP не обязаны отправлять IP-адрес своего клиента. Таким образом, каждый запрос, отправленный прокси-сервером, выглядит так, как будто он поступает из IP-адреса прокси. (Хотя в википедии есть некоторые упоминания о пользовательских заголовках, некоторые прокси посылают для отправки IP-адреса клиента .)

Это становится еще хуже, когда прокси-сервер HTTP сам использует другой HTTP-прокси – сервер, получающий запрос, получит IP-адрес последнего прокси-сервера в цепочке, и нет никакой гарантии, что второй прокси-сервер даже знает, что первый прокси-сервер не был ' регулярный клиент!

JKS,

Удаленные машины не имеют уникальных идентификаторов. Это невозможно.

Обычно разработчикам нравится отслеживать машины, когда конечный пользователь посещает страницу с формой, подобной логину по соображениям безопасности.

Вот что я делаю: я храню файл cookie, переменную сеанса и использую новый html5 localStorage для отслеживания людей на моих чувствительных страницах. Это действительно единственный способ сделать это точно. Хорошая вещь о localStorage (когда браузеры могут это сделать), конечный пользователь, как правило, не знает, что вы храните вещи на своей машине, а удаление файлов cookie не влияет.

Таким образом, вы можете создать таблицу базы данных с данными отслеживания, такими как: timestamp, ip_address, user_agent

то скажем, вы отслеживаете неудачные попытки входа в систему. Я бы сделал следующее:

 if(isset($_SESSION['failed_logins'])) { $failed_logins = $_SESSION['failed_logins']; $_SESSION['failed_logins'] = ($failed_logins + 1); } else { $_SESSION['failed_logins'] = 1; } 

Тогда я бы сделал то же самое с setcookie (), а затем скриптом localStorage.

Теперь я отслеживаю этого человека и знаю, сколько раз они терпят неудачу при входе в систему.

Затем я напишу данные этого пользователя в мою таблицу fail_login, как описано выше.

Я уверен, что это не тот ответ, который вы искали, но это действительно лучший способ отслеживать пользователей на вашем сайте.