как определить удаленную машину исключительно в php?

Это является лучшим, я мог придумать на первом сокращении:

public List<String> getRandomItemsFromList(int returnCount, List<String> list)
{
    List<String> returnList = new List<String>();
    Dictionary<int, int> randoms = new Dictionary<int, int>();

    while (randoms.Count != returnCount)
    {
        //generate new random between one and total list count
        int randomInt = new Random().Next(list.Count);

        // store this in dictionary to ensure uniqueness
        try
        {
            randoms.Add(randomInt, randomInt);
        }
        catch (ArgumentException aex)
        {
            Console.Write(aex.Message);
        } //we can assume this element exists in the dictonary already 

        //check for randoms length and then iterate through the original list 
        //adding items we select via random to the return list
        if (randoms.Count == returnCount)
        {
            foreach (int key in randoms.Keys)
                returnList.Add(list[randoms[key]]);

            break; //break out of _while_ loop
        }
    }

    return returnList;
}

Используя список randoms в диапазоне 1 - общее количество списка и затем просто получение по запросу тех объектов в списке, казалось, было лучшим способом, но использование Словаря для обеспечения уникальности является чем-то, что я все еще обдумываю.

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

5
задан Kara 21 June 2013 в 21:19
поделиться

5 ответов

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

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

11
ответ дан 18 December 2019 в 07:10
поделиться

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

  • HTTP_USER_AGENT
  • HTTP_ACCEPT
  • HTTP_ACCEPT_LANGUAGE
  • HTTP_ACCEPT_ENCODING
  • HTTP_ACCEPT_CHARSET

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

... Но это не будет идеальным решением: - (

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

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

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

Удачи!

4
ответ дан 18 December 2019 в 07:10
поделиться

Лучшим вариантом будет:

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

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

7
ответ дан 18 December 2019 в 07:10
поделиться

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

0
ответ дан 18 December 2019 в 07:10
поделиться

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

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

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

0
ответ дан 18 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: