Прежде всего, это не вопрос , как получить IP-адрес пользователя , поскольку я знаю, как это сделать.
В основном, администраторымоего веб-сайта (веб-приложение ASP.NET MVC 3) нужна возможность заблокировать определенный IP-адрес от отправки пользовательского контента.Поэтому я храню «IP-адрес» против пользователя в нашей системе.Круто.
Мой вопрос:
Когда (например, в какое время события жизненного цикла страницы) я должен проверять текущий IP-адрес пользователя и сохранять его в базе данных?
В данный момент я думаю об использовании сеанса .То есть, когда я впервые создаю сеанс (например, Session_OnStart()
), возьмите IP-адрес пользователя и вставьте его в сеанс.Затем, когда сессия заканчивается (например, Session_OnEnd()
), я вижу, отличается ли IP-адрес в сессии от адреса базы данных.Если это так, обновите БД.
В настоящее время мы используем InProc , но есть большой шанс, что мы позже перейдем к StateServer - и состояниям MSDN Session_OnEnd доступно только для InProc .Так что это может быть проблемой.
Есть какие-нибудь мысли / альтернативы этому подходу?
РЕДАКТИРОВАТЬ
Поэтому я попытался использовать Session_OnStart()
, чтобы попытатьсявыполните следующие действия:
Если пользователь прошел проверку подлинности, получите его IP-адрес, последний IP-адрес из базы данных и, если они другие, обновите базу данных.
Но проблема, похоже, заключается в том, что Session_OnStart
запускается до Application_AuthenticateRequest
- поэтому он никогда не проходит проверку "аутентифицировано".
Хороший пример, если пользователь заходит на мой сайт- используя Forms Auth, который устанавливает cookie с датой истечения срока недели (например).
Затем они возвращаются через несколько дней - Session_OnStart
запускается - но они еще не аутентифицированы,Несмотря на то, что файл cookie присутствует - он еще не был обработан в контексте http.
Таким образом, Session_OnStart выглядит бесполезным - есть другие идеи?