Как вы можете "закопать" определенный компьютер за брандмауэром, используя HttpContext?
Мне нужно иметь возможность идентифицировать одну систему из другой в ASP.Net, используя все, что доступно в HttpContext. Я пытался использовать многие из доступных ServerVariables, но часто системы настраиваются с диска, созданного из образа. Итак, из-за брандмауэра их IP-адрес одинаков и все их ServerVariables (browseragent, logonuser) одинаковы, мне нужно найти что-то еще, что будет отличать разные машины. Поскольку сайт защищен проверкой подлинности с помощью форм, необходимо отключить встроенную проверку подлинности Windows (в противном случае у меня был бы доступ к различным значениям Logon_User).
Я не женат на HttpContext, но мне кажется, что это единственный способ использовать код для получения идентифицируемой информации о пользователе.
EDIT / UPDATE:
@Robert Harvey предоставил пару ссылок для поиска, которые принесли много результатов, большинство из которых не соответствуют моему счету по той или иной причине (хотя есть еще несколько отличных идей, о которых я даже не думал до). Прежде всего мне нужно уметь определить, переключал ли кто-нибудь машины за брандмауэром. Поэтому я предоставлю некоторые детали структуры кода, которые пролят свет на то, почему некоторые вещи не работают для меня.
- Сессии / файлы cookie сохраняются до полуночи (решение, принятое мной над головой, я живу с этим)
- Аутентифицированный пользователь не использует класс MembershipUser. (даже если это произойдет, MembershipUser.IsOnline не предложит мне ничего, кроме ранее зарегистрированного пользователя)
- Известно, что пользователи удаляют куки или закрывают браузеры без выхода из системы.
- Мне нужны некоторые критерии, которые могут отличить одну машину от другой, не обязательно для предотвращения одновременных входов в систему, но, по крайней мере, для их идентификации.
2 ответа
Это самоответ. Я наткнулся на Browser Spy, и хотя он не рассматривает особенности того, как это сделать, он показывает, что с помощью комбинации этих элементов можно однозначно идентифицировать конкретную систему с минимальным пределом погрешности.
Создавайте guid при входе в систему и сохраняйте его в файле cookie и в соответствии с записью пользователя в базе данных.
Сравните это при каждом запросе, если он не совпадает, у вас есть одновременный вход в систему.
Чтобы быть понятным, этот cookie-файл является сеансовым cookie-файлом, таким как проверка подлинности форм, если они удалят его, они все равно будут отключены.