62,073
社区成员
发帖
与我相关
我的任务
分享
//调用方法根据Aid和客户端IP的信息来判断
string aid = "5";
IpLimitBiz biz = new IpLimitBiz();
if (biz.IsPopByIP(aid))
{
//显示
}
else
{
//不显示
}
//IpLimitBiz类的方法 判断是否显示
public bool IsPopByIP(string aid)
{
bool isPop = true;
Entity.IpLimit limit = ACache.GetLimitaidInfo(aid);
if (limit != null)
{
string ip = IPAccess.GetClientIP().Split(',')[0];
string ipnum = IPAccess.IPtoNum(ip).ToString();
DataTable dt = ACache.GetIPInfo(ipnum);
if (dt.Rows.Count > 0)
{
string province = dt.Rows[0]["province"].ToString();
string[] provinces = limit.Province.Replace(",", ",").Split(',');
for (int i = 0; i < provinces.Length; i++)
{
if (province.IndexOf(provinces[i]) == -1)
{
isPop = false;
}
else
{
isPop = true;
break;
}
}
}
}
return isPop;
}
//ACache类的方法在IsPopByIP中调用
public static Entity.IpLimit GetLimitaidInfo(string aid)
{
Entity.IpLimit limit = null;
string key = "IpLimitList";
DataTable dt = (DataTable)HttpContext.Current.Cache.Get(key);
if (dt == null)
{
string sql = "select * from IpLimit";
dt = SqlHelper.ExecuteDataset(SqlHelper.DBCONN, CommandType.Text, sql).Tables[0];
HttpContext.Current.Cache.Insert(key, dt.Copy(), null, DateTime.Now.AddMinutes(10.0), TimeSpan.Zero);
}
if (dt.Rows.Count > 0)
{
DataRow[] dr = dt.Select("aid='" + aid + "'");
if (dr.Length > 0)
{
limit = new Entity.IpLimit();
limit.ID = int.Parse(dr[0]["id"].ToString());
limit.aid = int.Parse(dr[0]["aid"].ToString());
limit.Province = dr[0]["Province"].ToString();
}
}
return limit;
}
//ACache类的方法在IsPopByIP中调用
public static DataTable GetIPInfo(string ipnum)
{
string sql = "select * from dbo.IpSource where ipnum1<=" + ipnum + " and ipnum2>=" + ipnum;
DataTable dt = SqlHelper.ExecuteDataset(SqlHelper.DBCONNLOG, CommandType.Text, sql).Tables[0];
return dt;
}
//IPAccess类的方法在IsPopByIP中调用 获取客户端IP
public static string GetClientIP()
{
string ipString = "";
if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
{
ipString = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
else
{
ipString = HttpContext.Current.Request.UserHostAddress;
}
return ipString;
}
//IPAccess类的方法在IsPopByIP中调用 将IP 地址转化为数字
public static long IPtoNum(string Ip)
{
string[] stringip = new string[4];
stringip = Ip.Split('.');
long ipnum = Convert.ToInt64((stringip[0])) * 16777216 + Convert.ToInt64(stringip[1]) * 65536 + Convert.ToInt64(stringip[2]) * 256 + Convert.ToInt64(stringip[3]);
return ipnum;
}
上面是代码,帮忙分析一下,多谢