Как вы можете отследить определенный компьютер за брандмауэром с помощью HttpContext?

Мне нужно иметь возможность идентифицировать одну систему от другой в ASP.Net, используя все, что доступно в HttpContext. Я пытался использовать многие из доступных ServerVariables, но часто системы настраиваются с диска, созданного на основе образа. Итак, из-за брандмауэра их IP-адрес один и тот же, и все их ServerVariables (browseragent, logonuser) одинаковы, мне нужно найти что-то еще, что отличало бы разные машины. Поскольку сайт защищен с помощью форм, встроенная проверка подлинности Windows должна быть отключена (в противном случае у меня будет доступ к другим значениям Logon_User).

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

РЕДАКТИРОВАТЬ/ОБНОВИТЬ:

@Robert Harvey предоставил пару ссылок для поиска, которые дали много результатов, большинство из которых не соответствуют моим требованиям по той или иной причине (хотя там все еще есть пара отличных идей, о которых я не подумал до). В первую очередь мне нужно иметь возможность определить, переключил ли кто-то компьютеры за брандмауэром. Поэтому я предоставлю некоторые детали структуры кода, которые прольют свет на то, почему некоторые вещи не работают у меня.

  1. Сеансы/куки сохраняются до полуночи (решение было принято выше моей головы, я живу с этим)
  2. Пользователь, прошедший проверку подлинности, не использует класс MembershipUser. (даже если бы это было так, MembershipUser.IsOnline не предложил бы мне ничего, кроме ранее вошедшего в систему пользователя)
  3. Известно, что пользователи удаляют файлы cookie или закрывают браузеры, не выходя из системы.
  4. Мне нужны некоторые критерии, которые могут отличать одну машину от другой, не обязательно для предотвращения одновременных входов в систему, но, по крайней мере, для их идентификации.

person Joel Etherton    schedule 13.07.2010    source источник
comment
Мне кажется, что вы можете поместить файл cookie с GUID на машину при первом доступе пользователя к сайту с этой машины. Конечно, пользователь всегда может удалить файлы cookie. Какие функции обеспечивает эта идентификация?   -  person Robert Harvey    schedule 13.07.2010
comment
Что вы подразумеваете под словом «след»?   -  person PhilPursglove    schedule 13.07.2010
comment
@Robert Harvey - предположительно, это не позволит одному пользователю использовать несколько компьютеров для одновременного входа на сайт, а также поможет определить, когда пользователь переключил компьютеры, если все еще доступен активный сеанс.   -  person Joel Etherton    schedule 13.07.2010
comment
@PhilPursglove — определение некоторых основных общих характеристик машины, которые могут быть связаны с аутентификацией пользователя. Пользователь X входит в систему с ПК Y. Затем пользователь X входит в систему с ПК Z. Мне нужно идентифицировать это состояние. В настоящее время, если 2 машины имеют одинаковую конфигурацию и находятся за брандмауэром, они выглядят идентично серверу.   -  person Joel Etherton    schedule 13.07.2010
comment
@Robert Harvey - я посмотрел в Google и SO и ничего не нашел. Вероятно, в моих критериях поиска используются неправильные слова. Если у вас есть предложения по ссылкам, я готов прочитать все, что выдвинуто.   -  person Joel Etherton    schedule 13.07.2010
comment
См. здесь: google.com/   -  person Robert Harvey    schedule 13.07.2010
comment
Маскирует ли брандмауэр также свойство HttpRequest.UserHostName?   -  person PhilPursglove    schedule 13.07.2010
comment
@PhilPursglove - не фильтрует, но во многих случаях просто возвращает IP-адрес.   -  person Joel Etherton    schedule 13.07.2010


Ответы (2)


Создайте guid при входе в систему и сохраните его в файле cookie и в записи пользователя в базе данных.

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

Чтобы было ясно, этот файл cookie является файлом cookie сеанса, таким как проверка подлинности форм, если они удалят его, они все равно выйдут из системы.

person bleevo    schedule 18.07.2010
comment
Это не относится к идентификации самой машины. Это решение будет рассматривать каждый вход в систему как отдельный вход в систему. Мой вопрос конкретно требует, чтобы машина была идентифицирована. - person Joel Etherton; 18.07.2010
comment
Если пользователи находятся за NAT, это невозможно, для достижения того, о чем вы просите, также должно работать, если пользователи используют разные браузеры. Интересный вопрос буду думать дальше. - person bleevo; 18.07.2010
comment
Если бы вы могли упростить проблему, я мог бы помочь, если вы хотите отслеживать только ту же машину, тот же логин, тот же браузер, это можно сделать. Просто создайте страницу, которая возвращает guid, и установите кеширование этой страницы на год, опять же, это не сильно отличается от файла cookie, но оно будет сохраняться до тех пор, пока пользователь не удалит свой кеш. Кроме того или того же, используя куки то, что вы просите, невозможно. - person bleevo; 18.07.2010

Это самостоятельный ответ. Я наткнулся на Browser Spy, и, хотя он не описывает особенности того, как это сделать, он указывает, что благодаря комбинации этих элементов можно однозначно идентифицировать конкретную систему с минимальной погрешностью.

person Joel Etherton    schedule 10.08.2010