如果需要,我需要一种方法来阻止用户使用他们的IP。什么是最好的方法来解决这个问题?我可以使用Request.ServerVariables [“REMOTE_ADDR”]并将IP地址存储为数据库中的字符串吗?什么长度适合varchar?
由于
答案 0 :(得分:1)
我们在其中一个应用中做了同样的事情,我们采用的方法是创建一个自定义的HttpHandler,它连接到Application_BeginRequest
事件。
在处理程序内部,我们通过执行HttpContext.Current.Request.UserHostAddress
抓取请求的IP地址,然后对我们阻止的IP地址列表执行检查。被阻止的IP都存储在数据库中,但我们还在服务器的内存中保存了一个缓存副本,以避免在每次请求时都访问数据库。
关于创建自定义HTTP模块Walkthrough: Creating and Registering a Custom HTTP Module
,MSDN上有一篇非常好的文章为了价值,我们将IP作为字符串存储在数据库中,但有一些关于在已添加的帖子中使用的最佳格式的良好信息。
答案 1 :(得分:0)
你可以将IP存储为长度为16的varchar,或者你可以存储单个整数b1 + b2 * 255 + b3 * 255^2 + b4 * 255^3
,其中b1到b4是来自ip的字段,如b1.b2.b3.b4
你可以使用其他校验和但是没有意义用于将长ip存储为字符串。