首先,这不是一个关于的问题如何获取用户的IP地址,因为我知道该怎么做。关于保持用户“最后的IP地址”的建议
基本上,我的网站(ASP.NET MVC 3 Web应用程序)的管理员需要能够阻止某个IP地址提交用户内容。所以我在我们的系统中存储了针对用户的“IP地址”。凉。
我的问题是:
时(例如在什么时间,页面生命周期事件),我应该检查用户当前的IP地址,并保存到数据库中?
此刻,我正在考虑使用会话。也就是说,当我第一次创建会话时(例如Session_OnStart()
),请抓住用户的IP地址并将其保存在会话中。然后,当会话结束时(例如Session_OnEnd()
),我看到会话中的IP地址是否与数据库的IP地址不同。如果是,更新数据库。
在我们使用是InProc时刻,但有一个很好的机会,我们会去的StateServer以后 - 和MSDN指出的Session_OnEnd只适用于是InProc。所以这可能是一个问题。
这种方法的任何想法/替代方案?
编辑
所以我试图用Session_OnStart()
尝试做以下事情:
如果用户通过认证,获得他们的IP地址,从数据库中获取他们的最后一个IP,如果他们不同,更新数据库。
但问题似乎是:Session_OnStart
运行以前Application_AuthenticateRequest
- 所以它从来没有经过“被认证”检查。
一个很好的例子是,如果用户登录到我的网站 - 使用Forms Auth,它设置一个有效期限为一周的cookie(例如)。
然后几天后他们回来了 - Session_OnStart
被解雇 - 但他们还没有通过身份验证。即使cookie存在 - 它尚未处理到http上下文中。
因此,Session_OnStart看起来像一个没有去 - 任何其他的想法?
我不明白你为什么需要将IP地址存储到数据库中。 – 2011-05-06 10:11:49
@Carl R - 因为管理员可能会看到一个特定的IP地址在我的网站上发送了垃圾内容,并且他们创建了不同的用户。所以这样,我可以通过IP地址禁用所有帖子 - 例如'UPDATE Posts SET Disabled = 1 WHERE IpAddress = Blah' – RPM1984 2011-05-06 23:40:01